Web VPython 3.2 from vpython import * m = 1 l0 = 1 k = 100 scene = canvas( background=vec(0.7, 0.7, 0.9), center=vec(0, -1, 0), width=600, height=700 ) ceil = box(pos=vec(0, 0, 0), length=1, width=1, height=0.01) spring = helix(pos=vec(0, 0, 0), axis=vec(0, -10, 0), radius=0.1) ball = sphere(pos=vec(0, -l0, 0), vel=vec(0, 0, 0), radius=0.1) t, dt = 0.0, 0.01 while True: rate(100) t += dt tension = -k * (mag(spring.axis) - 10) * norm(spring.axis) ball.a = vec(0, -9.8, 0) + tension / m ball.vel += ball.a * dt ball.pos += ball.vel * dt spring.axis = ball.pos