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