REM Stardance 5.02.02 REM by R.G.Weston REM After A.K. Dewdney, Sci.Am. Vol. 254(No.1)Page6 January 1986 MODE0:OFF N=9:DIM ax(N),ay(N),az(N),vx(N),vy(N),vz(N),x(N),y(N),z(N) PRINTTAB(15,5)"Star Dance - Stars Moving under Gravity" PRINTTAB(7,10)"Press Space Bar to set off and when you want to go again" G=GET:CLS REPEAT flag=0 N=1+RND(8) GCOL0,1:VDU29,640;512; PRINTN;" stars" R=RND(TIME) PROCrandom_setup REPEAT FOR i=1 TO N ax(i)=0:ay(i)=0:az(i)=0 FOR j= 1 TO N PROCforce_acc(i,j) NEXT j NEXT i FOR i= 1 TO N PROCvel(i) NEXT i FOR i=1 TO N PROCnewpos(i) PROCdisplay NEXT i IF flag=0 THEN PROCpause(1) flag=1 UNTIL INKEY$(1)=" ":*FX21,0 CLS UNTIL FALSE : END : DEF PROCforce_acc(i,j) IF i=j THEN ENDPROC dsq=(x(i)-x(j))^2+(y(i)-y(j))^2 + (z(i)-z(j))^2 IF dsq=0 THEN PRINTTAB(0,0)"COLLISION!!":ENDPROC d=SQR(dsq) F=10000/dsq ax(i)=ax(i)+F*(x(j)-x(i))/d ay(i)=ay(i)+F*(y(j)-y(i))/d az(i)=az(i)+F*(z(j)-z(i))/d ENDPROC : DEF PROCvel(i) vx(i)=vx(i)+ax(i) vy(i)=vy(i)+ay(i) vz(i)=vz(i)+az(i) ENDPROC : DEF PROCnewpos(i) x(i)=x(i)+vx(i) y(i)=y(i)+vy(i) z(i)=z(i)+vz(i) ENDPROC : DEF PROCrandom_setup FOR i=1 TO N vx(i)=(-1)^(RND(2))*RND(300)/100 vy(i)=(-1)^(RND(2))*RND(300)/100 vz(i)=(-1)^(RND(2))*RND(300)/100 : x(i)=(-1)^(RND(2))*RND(400) y(i)=(-1)^(RND(2))*RND(400) z(i)=(-1)^(RND(2))*RND(400) PLOT69,x(i),y(i) NEXT i ENDPROC : DEF PROCdisplay PLOT69,x(i),y(i) ENDPROC : DEF PROCpause(s):TIME=0:REPEAT UNTIL TIME>100*s:ENDPROC