Untitled
unknown
plain_text
a year ago
1.5 kB
8
Indexable
Web VPython 3.2 scene = canvas(background = color.white) L_0 = 8 theta_0 = 10 * pi/180 omega_0 = 0 g = 9.8 fixed_point = sphere(pos=vec(0,6,0), radius=0.5, color=color.red) ball = sphere(pos = fixed_point.pos + vec(L_0 * sin(theta_0), -L_0 * cos(theta_0), 0), mass = 0.5, radius = 0.2, color = color.blue) spring = helix(pos = fixed_point.pos, axis = ball.pos - fixed_point.pos, radius = 0.2, color = color.orange) #Angular Displacement graph a_graph = graph(title = "Theta - Omega", xtitle = "t", ytitle = " ") #Velocity curve theta_plot = gcurve(graph = a_graph, color = color.red) omega_plot = gcurve(graph = a_graph, color = color.green) ball.omega = omega_0 ball.p = ball.mass * L_0 * ball.omega ball.theta = theta_0 t = 0 dt = 0.001 myrate = 2500 #Stores old omega ball.omega_old = ball.omega #Period tracker ball.T = 0 scene.waitfor('click') while t < 20: rate(myrate) spring.axis = ball.pos - fixed_point.pos F = -ball.mass * g * sin(ball.theta) ball.p = ball.p + F*dt ball.omega = ball.p / (L_0 * ball.mass) ball.theta = ball.theta + ball.omega * dt ball.pos = fixed_point.pos + vec(L_0*sin(ball.theta), -L_0*cos(ball.theta), 0) theta_plot.plot(pos = (t, ball.theta)) omega_plot.plot(pos = (t, ball.omega)) t += dt if ball.omega_old > 0 and ball.omega < 0: print(ball.T, 2*pi*sqrt(L_0/g)) ball.T = 0 ball.omega_old = ball.omega ball.T += dt
Editor is loading...
Leave a Comment