Un oggetto si muove in verticale secondo la legge di Hooke
, per bilanciare g
![]() ![]() | |||
![]() | ![]() | ||
![]() | ![]() | ![]() | ![]() |
![]() | ![]() | ![]() | ![]() |

from vpython import *
c = canvas(width=480, height=640, align="left")
g = graph(title = "y(t)", align="right")
gc = gcurve(color=color.cyan, width=5)
DIM = 1 # LATO DEL CUBO
START = 0 # ORDINATA POSIZIONE INIZIALE
SPESS = DIM/10
parete = box (pos=vector(0, 2*DIM, 0) , size=vector(DIM, SPESS, DIM))
pavimento = box (pos=vector(0, -DIM/2, -(DIM+SPESS)/2), size=vector(DIM, 5*DIM, SPESS))
zero = box (pos=vector(0, 0, -(DIM+SPESS)/2) , size=vector(DIM, SPESS, SPESS),
color=color.red)
molla = helix(pos=vector(0, 2*DIM, 0) , size=vector(2*DIM, DIM/2, DIM/2),
color=color.cyan, coils=20)
oggetto = box (pos=vector(0, START, 0) , size=vector(DIM, DIM, DIM),
color=color.yellow)
molla.rotate(angle=-pi/2, axis=vector(0,0,1))
oggetto.velocità = vector(0,0,0)
k = 10 # costante elastica
g = 9.81 # costante
m = 1 # massa dell'oggetto
t = 0 # tempo
dt = 0.05
while(t < 2*tau):
rate(25)
F = -k*oggetto.pos.y-m*g
a = F/m
oggetto.velocità += vector(0, a, 0) * dt
oggetto.pos += oggetto.velocità * dt
molla.length = 2*DIM - oggetto.pos.y
gc.plot(t, oggetto.pos.y)
t += dt