SCREEN 12:CLS ?"Sorting in potato bag" SF=0 A=8 B=7 G=.8 N=32 NC=0 NT=0 DIM X(N),Y(N),VX(N),VY(N),OX(N),OY(N),rc(n),orc(n),V(N),c(n) PI=4*ATN(1) rc1=.4 rc2=1.2 V=.8 DT=.05 KY=3/4 kr=1:'koeficient otrajenija T$=TIME$ T1$=LEFT$(T$,2) T2$=MID$(T$,4,2) T3$=RIGHT$(T$,2) T=VAL(T3$+T2$+T1$+T3$) 'RANDOMIZE(T) randomize 137 WINDOW (-100,-KY*100)-(100,KY*100) FOR I=1 TO N FI=2*PI*RND 'rc(i)=rc1+(rc2-rc1)*rnd(rc1/rc2) if i<=2*n/3 then rc(i)=rc1 else rc(i)=rc2 if i<=2*n/3 then c(i)=15 else c(i)=12 X(I)=-B+RC(i)+(2*(B-RC(i)))*RND Y(I)=-A+RC(i)+(2*(A-RC(i)))*RND VX(I)=V*COS(FI) VY(I)=V*SIN(FI) V=SQR(VX(I)^2+VY(I)^2) OX(I)=X(I) OY(I)=Y(I) orc(i)=rc(i) NEXT I ?"hit - to quit" LINE (-B,A)-(B,-A),1,B FOR I=1 TO N CIRCLE (X(I),Y(I)),RC(i),c(i) OX(I)=X(I):OY(I)=Y(I):orc(i)=rc(i) NEXT I MOVING: FOR I=1 TO N IF INKEY$=CHR$(27) THEN STOP GOSUB IMPACT GOSUB WALLS X(I)=X(I)+VX(I)*DT VY(I)=VY(I)-G*DT Y(I)=Y(I)+VY(I)*DT CIRCLE(OX(I),OY(I)),RC(i),0 LINE (-B,A)-(B,-A),3,B CIRCLE(X(I),Y(I)),RC(i),c(i) OX(I)=X(I):OY(I)=Y(I):orc(i)=rc(i) NEXT I GOTO MOVING WALLS: IF (X(I)<(-B+.1+RC(i)) AND VX(I)<0) OR (X(I)>(B-.1-RC(i)) AND VX(I)>0) THEN VX(I)=-kr*VX(I) IF (Y(I)<(-A+.1+RC(i)) AND VY(I)<0) OR (Y(I)>(A-.1-RC(i)) AND VY(I)>0) THEN VY(I)=-kr*VY(I) RETURN IMPACT: FOR J=1 TO N AX=X(J)-X(I):AY=Y(J)-Y(I) VRX=VX(I)-VX(J):VRY=VY(I)-VY(J) VR=SQR(VRX^2+VRY^2) SCAL=VRX*AX+VRY*AY DIS=SQR(AX^2+AY^2) IF DIS <= (RC(i)+rc(j)+.2) AND I<>J AND SCAL>0 THEN GOSUB IMPACT1 NEXT J RETURN IMPACT1: V(I)=SQR(VX(I)^2+VY(I)^2) V(J)=SQR(VX(J)^2+VY(J)^2) PX=VX(I)+VX(J):PY=VY(I)+VY(J) SOUND 10000,.0001*SF SCAL1=VX(I)*AX+VY(I)*AY SCAL2=VX(J)*AX+VY(J)*AY VNI=(SCAL1/DIS) VNJ=(SCAL2/DIS) VTI=SQR(V(I)^2-VNI^2) VTJ=SQR(V(J)^2-VNJ^2) VNXI=VNI*AX/DIS VNYI=VNI*AY/DIS VNXJ=VNJ*AX/DIS VNYJ=VNJ*AY/DIS VTXI=VX(I)-VNXI VTYI=VY(I)-VNYI VTXJ=VX(J)-VNXJ VTYJ=VY(J)-VNYJ VX(I)=VTXI+VNXJ VY(I)=VTYI+VNYJ VX(J)=PX-VX(I) VY(J)=PY-VY(I) V(I)=SQR(VX(I)^2+VY(I)^2) V(J)=SQR(VX(J)^2+VY(J)^2) NC=NC+1 RETURN