from visual import * from integrate import * scene.autoscale=0 scene.range=1.0 ball1=sphere(radius=0.05) ball2=sphere(radius=0.05) ball1.track=curve(radius=0.01,color=color.red) ball2.track=curve(radius=0.01,color=color.red) ball1.pos=vector(0.0,0.25,0) ball2.pos=vector(0.1,-0.5,0) ball1.vel=vector(0.5,0.1,0.0) ball2.vel=vector(-0.5,0.0,0.0) ball1.acc=vector(0,0,0) ball2.acc=vector(0,0,0) ball1.acc2=vector(0,0,0) ball2.acc2=vector(0,0,0) ball1.mass=1.0 ball2.mass=1.0 L=0.95 system=[ball1,ball2] dt=0.01 t=0 while(1): rate(500) t=t+dt for balla in system: balla.acc=(1.0/balla.mass)*totalforce(balla,system) for balla in system: balla.pos=balla.pos+balla.vel*dt+balla.acc*dt*dt*0.5 balla.track.append(pos=balla.pos) for balla in system: balla.acc2=(1.0/balla.mass)*totalforce(balla,system) for balla in system: balla.vel=balla.vel+(balla.acc+balla.acc2)*dt*0.5 # put in box with elastic walls for balla in system: if((balla.pos.x>L) or (balla.pos.x<-L)): balla.vel.x=-balla.vel.x if((balla.pos.y>L) or (balla.pos.y<-L)): balla.vel.y=-balla.vel.y if((balla.pos.z>L) or (balla.pos.z<-L)): balla.vel.z=-balla.vel.z