Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. from visual import*
  2. from visual.graph import *
  3. scene = display(title="Pendulum",width=500,height=500,range=2)
  4. scene.autoscale = 0
  5. L = 1
  6. theta1 = -pi/4
  7. theta2 = pi/3
  8. s1 = sphere(pos = (L * sin(theta1), L * -cos(theta1), 0), radius = .08, color = color.red, m = .0025, p = vector(0,0,0))
  9. s2 = sphere(pos = (L * sin(theta2), L * -cos(theta2), 0), radius = .08, color = color.red, m = .0025, p = vector(0,0,0))
  10. c12 = vector(0,0,0)
  11. g1 = s1.m * 9.8
  12. g2 = s2.m * 9.8
  13. pend1 = cylinder(pos = (0,0,0), axis = s1.pos, radius = .01, color = color.green)
  14. pend2 = cylinder(pos = (0,0,0), axis = s2.pos, radius = .01, color = color.green)
  15. spr12 = helix(pos = s1.pos, axis = s2.pos - s1.pos, radius = .05, thickness = .02, coils = 10, color = color.green)
  16. k12 = 0.1
  17.  
  18. def proj(v, s):
  19. return dot(v,s)/dot(s,s)*s
  20.  
  21.  
  22.  
  23.  
  24. t = 0
  25. dt = .005
  26. while(1):
  27. rate(600)
  28. s1.pos = (L * sin(theta1), L * -cos(theta1), 0)
  29. s2.pos = (L * sin(theta2), L * -cos(theta2), 0)
  30. c12 = (s1.m*s1.pos+s2.m*s2.pos)/(s1.m+s2.m)
  31. s1.rest = (s1.pos - c12)*0.7 + c12
  32. s2.rest = (s2.pos - c12)*0.7 + c12
  33. fpar1 = (sin(theta1) * g1) * norm(vector(L*sin(theta1-pi/2), L*-cos(theta1-pi/2),0)) + proj((s1.pos-s1.rest)*k12, norm(vector(L*sin(theta1-pi/2), L*-cos(theta1-pi/2),0)))
  34. fpar2 = sin(theta2) * g2 * norm(vector(L*sin(theta2-pi/2), L*-cos(theta2-pi/2),0)) + proj((s2.pos-s2.rest)*k12, norm(vector(L*sin(theta2-pi/2), L*-cos(theta2-pi/2),0)))
  35. s1.p += (fpar1 * dt)
  36. s2.p += (fpar2 * dt)
  37. s1.pos += (s1.p / s1.m) * dt
  38. s2.pos += (s2.p / s2.m) * dt
  39. spr12.axis = s2.pos - s1.pos
  40. spr12.pos = s1.pos
  41. theta1 = arcsin(s1.pos.x / L)
  42. theta2 = arcsin(s2.pos.x / L)
  43. pend1.axis = s1.pos
  44. pend2.axis = s2.pos
  45. t += dt
  46. #print mag(s1.pos), mag(s2.pos)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement