SCREEN 12:CLS A=60 N=80 K=60 DIM X(N),Y(N),VX(N),VY(N),OX(N),OY(N),V(N),CH(K) PI=4*ATN(1) PULSX=0 PULSY=0 RC=2 V=2 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) REM WINDOW (-100,-KY*100)-(100,KY*100) FOR I=1 TO N FI=2*PI*RND X(I)=-A+RC+(2*(A-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) REM C=INT(10*V):CH(C)=CH(C)+1 REM GOSUB CHANNEL OX(I)=X(I) OY(I)=Y(I) NEXT I CLS REM LINE (-A,A)-(A,-A),1,B FOR I=1 TO N REM CIRCLE (X(I),Y(I)),RC OX(I)=X(I):OY(I)=Y(I) NEXT I ?"Нажмите - для выхода" ?"Распределение шариков по скоростям, в результате соударений" MOVING: E=0 FOR I=1 TO N IF INKEY$=CHR$(27) THEN STOP GOSUB IMPACT GOSUB WALLS X(I)=X(I)+VX(I)*DT Y(I)=Y(I)+VY(I)*DT REM CIRCLE(OX(I),OY(I)),RC,0 REM LINE (-A,A)-(A,-A),1,B REM CIRCLE(X(I),Y(I)),RC OX(I)=X(I):OY(I)=Y(I) NEXT I GOTO MOVING WALLS: IF (X(I)<(-A+1+RC) AND VX(I)<0) OR (X(I)>(A-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: E=0 REM FOR M=1 TO N REM E=E+(VX(M)^2+VY(M)^2) REM NEXT M REM LOCATE 1,1:?" " REM LOCATE 1,1:?"E=";INT (10*E) V(I)=SQR(VX(I)^2+VY(I)^2) V(J)=SQR(VX(J)^2+VY(J)^2) REM C=INT(10*V(I)):CH(C)=CH(C)-1 REM C=INT(10*V(J)):CH(C)=CH(C)-1 PX=VX(I)+VX(J):PY=VY(I)+VY(J) SOUND 1000,.01 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) C=INT(10*V(I)):CH(C)=CH(C)+1 C=INT(10*V(J)):CH(C)=CH(C)+1 GOSUB CHANNEL RETURN CHANNEL: REM CLS DCX=640/(K) FOR C=1 TO K for d=c*dcx to (c+1)*dcx LINE (d,470)-(d,470-1*CH(C)) next d NEXT C RETURN