from visual import * scene.autoscale = 0 c = curve(radius=0.1) n=40 scene.center=(n/2,0,0) scene.range = 0.6 * n slinkieposition = [] slinkievelocity = [] for i in range(n): slinkieposition.append(vector(i,0,0)) slinkievelocity.append(vector(0,2.*sin(i/(n-1.0)*2.*3.1415926535),0)) dt = 0.05 k = 1.0 mass=1.0 while 1: rate(20) for i in range(n): slinkieposition[i] += dt * slinkievelocity[i] slinkieposition[0] = vector(0,0,0) slinkieposition[n-1] = vector(n-1,0,0) for i in range(1,n-1): force = k * (slinkieposition[i-1] - slinkieposition[i] + slinkieposition[i+1] - slinkieposition[i]) slinkievelocity[i] += force/mass c.pos = slinkieposition