*FLOAT 64 MODE 10 : OFF ScrW% = @vdu%!208 ScrH% = @vdu%!212 NumObjs% = 20 DIM X( NumObjs%-1 ), Y( NumObjs%-1 ) DIM VelX( NumObjs%-1 ), VelY( NumObjs%-1 ) DIM Cx%( NumObjs%-1 ), Cy%( NumObjs%-1 ) DIM Chg%( NumObjs%-1 ), ChgStart%( NumObjs%-1 ) FOR I% = 0 TO NumObjs%-1 X(I%) = RND(ScrW%)-1 Y(I%) = RND(ScrH%)-1 ChgStart%(I%) = 100 + RND(200) NEXT I% Chg%() = 0 *REFRESH OFF REPEAT CLS FOR I% = 0 TO NumObjs%-1 IF Chg%(I%) = 0 THEN Chg%(I%) = ChgStart%(I%) Cx%(I%) = 32 + RND(ScrW% - 2*32) Cy%(I%) = 32 + RND(ScrH% - 2*32) ELSE Chg%(I%) -= 1 ENDIF Dx = X(I%) - Cx%(I%) Dy = Y(I%) - Cy%(I%) L = 0.15 / SQR(Dx^2 + Dy^2) VelX(I%) -= Dx * L VelY(I%) -= Dy * L angle = FNatan2( VelY(I%), VelX(I%) ) X% = X(I%) Y% = Y(I%) x1% = X% + 8*COS(angle - PI/2) y1% = Y% + 8*SIN(angle - PI/2) x2% = X% + 24*COS(angle) y2% = Y% + 24*SIN(angle) x3% = X% + 8*COS(angle + PI/2) y3% = Y% + 8*SIN(angle + PI/2) GCOL 1 + (I% MOD 15) MOVE 2*x1%, 2*y1% MOVE 2*x3%, 2*y3% PLOT 85, 2*x2%, 2*y2% IF ABS(VelX(I%)) > 4.0 THEN VelX(I%) = 4.0*SGN(VelX(I%)) IF ABS(VelY(I%)) > 4.0 THEN VelY(I%) = 4.0*SGN(VelY(I%)) X(I%) += VelX(I%) Y(I%) += VelY(I%) NEXT I% *REFRESH WAIT 1 UNTIL FALSE END DEF FNatan2(y,x) : ON ERROR LOCAL = SGN(y)*PI/2 IF x>0 THEN = ATN(y/x) ELSE IF y>0 THEN = ATN(y/x)+PI ELSE = ATN(y/x)-PI
|
|
|
|
|
|
|
|