Pendolo – 1

\displaystyle a = -\frac{g}{l} \sin \alpha\displaystyle \Delta v = a\cdot \Delta t\displaystyle \Delta \alpha = v\cdot \Delta t
from vpython import *
#----------------------------------------------------------------
g     = 9.81      
gradi = 90                               
lunghezza = 10
raggio    = 1
angolo0   = radians(gradi)
x0    = +lunghezza*sin(angolo0)
y0    = -lunghezza*cos(angolo0)
#----------------------------------------------------------------
c     = canvas(width=480, height=480)
pivot = vector(0,0,0)

punto = sphere  (color=color.yellow, radius=raggio/5, pos=pivot)
sfera = sphere  (color=color.cyan  , radius=raggio  , pos=vector(x0,y0,0),
                 make_trail=True, retain= 50)
filo  = cylinder(color=color.yellow, radius=raggio/10, pos=pivot,
                 axis=sfera.pos-pivot)
#----------------------------------------------------------------
g_xy = graph(fast=False, xmin=0, xmax=tau, scroll=True)
g_x = gcurve(color=color.red , label="x(t)", dot=True, graph=g_xy)
g_y = gcurve(color=color.blue, label="y(t)", dot=True, graph=g_xy)

g_av = graph(fast=False, xmin=0, xmax=tau, scroll=True)
g_a = gcurve(color=color.red , label="a(t)", dot=True, graph=g_av)
g_v = gcurve(color=color.blue, label="v(t)", dot=True, graph=g_av)
#----------------------------------------------------------------
angolo = angolo0
v_ang  = 0

t  = 0
dt = 0.01
while(True):
    rate(100)
    
    a_ang   = -(g/lunghezza) * sin(angolo)
    v_ang  += a_ang * dt
    angolo += v_ang * dt
    x       = +lunghezza * sin(angolo)
    y       = -lunghezza * cos(angolo)
    
    sfera.pos = vector(x,y,0)
    filo.axis = sfera.pos - pivot

    g_x.plot(t,x    ); g_y.plot(t,y    )
    g_a.plot(t,a_ang); g_v.plot(t,v_ang)    

    t += dt

Lascia un commento