SCREEN 12:CLS SF=0:REM SOUND-1,NO SOUND-0 A=40 B=80 G=0 N=10 NC=0:REM NC-NUMBER OF COLLISIONS NT=0:REM NT-NUMBER OF COLLISIONS PER TIME UNIT DIM X(N),Y(N),VX(N),VY(N),OX(N),OY(N),V(N) PI=4*ATN(1) RC=1 V=1 DT=.5 KY=3/4 T$=TIME$ T1$=LEFT$(T$,2) T2$=MID$(T$,4,2) T3$=RIGHT$(T$,2) T=VAL(T3$+T2$+T1$+T3$) RANDOMIZE(T) WINDOW (-100,-KY*100)-(100,KY*100) FOR I=1 TO N FI=2*PI*RND X(I)=-B+RC+(2*(B-RC))*RND Y(I)=-A+RC+(2*(A-RC))*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) NEXT I CLS '?"IMPACT1" '?"PARTICLES NUMER=";N '?"COLLIDION RADIUS=";RC '?"TIME QUANTUM=";DT '?"INITIAL VELOSITY=";V LINE (-B,A)-(B,-A),1,B FOR I=1 TO N CIRCLE (X(I),Y(I)),RC,2 OX(I)=X(I):OY(I)=Y(I) NEXT I ?"2D->1D gas" ?"-to quit" 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,0 'line (-b,a)-(b,-a),0,b LINE (-B,A)-(B,-A),3,B CIRCLE(X(I),Y(I)),RC,2 OX(I)=X(I):OY(I)=Y(I) NEXT I if a>=rc then line (-b,a)-(b,-a),0,b:a=a-.0002*a: line(-b,a)-(b,-a),3,b GOTO MOVING WALLS: IF (X(I)<(-B+1+RC) AND VX(I)<0) OR (X(I)>(B-1-RC) AND VX(I)>0) THEN VX(I)=-VX(I) IF (Y(I)<(-A+1+RC) AND VY(I)<0) OR (Y(I)>(A-1-RC) AND VY(I)>0) THEN VY(I)=-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 <= 2*RC 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 REM VX(J)=VTXJ+VNXI REM VY(J)=VTYJ+VNYI 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