Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.09 KB | None | 0 0
  1. from visual import *
  2.  
  3. Balls = [sphere(color = color.blue, vel = vector(0, 0, 0), mass = 1.0) for i in range(13)]
  4.  
  5. Balls[0].color = color.red
  6. Balls[0].vel = vector(5, 0, 0)
  7. Balls[0].mass = 10.0
  8. Balls[0].radius = 1.5
  9. Balls[0].pos = (-3, 0, 0)
  10.  
  11. Balls[1].pos = (0, 2, 0)
  12. Balls[2].pos = (3, 2, 0)
  13. Balls[3].pos = (6, 2, 0)
  14. Balls[4].pos = (0, -2, 0)
  15. Balls[5].pos = (3, -2, 0)
  16. Balls[6].pos = (6, -2, 0)
  17. Balls[7].pos = (0, 6, 0)
  18. Balls[8].pos = (3, 6, 0)
  19. Balls[9].pos = (6, 6, 0)
  20. Balls[10].pos = (0, -6, 0)
  21. Balls[11].pos = (3, -6, 0)
  22. Balls[12].pos = (6, -6, 0)
  23.  
  24. freq = 100
  25. t = 0
  26. dt = 1.0/freq
  27.  
  28. while t < 20:
  29.     rate(freq)
  30.     for i in range(13):
  31.         for j in range(13):
  32.             if i == j: continue
  33.             if mag(Balls[i].pos - Balls[j].pos) < Balls[i].radius + Balls[j].radius:
  34.                 a = mag(Balls[i].vel - Balls[j].vel) ** 2
  35.                 b = -2 * dot((Balls[i].pos - Balls[j].pos), (Balls[i].vel - Balls[j].vel))
  36.                 c = mag(Balls[i].pos - Balls[j].pos) ** 2 - (Balls[i].radius + Balls[j].radius) ** 2
  37.                 delta = b**2 - 4 * a * c
  38.                 if a != 0 and delta >= 0:
  39.                     dt_prim = (-b + sqrt(delta)) / (2 * a)
  40.                 else:
  41.                     dt_prim = 0
  42.                 Balls[i].pos = Balls[i].pos - Balls[i].vel * dt_prim
  43.                 Balls[j].pos = Balls[j].pos - Balls[j].vel * dt_prim
  44.                 Balls[i].vel = Balls[i].vel - 2 * (Balls[j].mass / (Balls[j].mass + Balls[i].mass)) * dot((Balls[i].vel - Balls[j].vel), ((Balls[i].pos - Balls[j].pos)/mag(Balls[i].pos - Balls[j].pos))) * ((Balls[i].pos - Balls[j].pos)/mag(Balls[i].pos - Balls[j].pos))
  45.                 Balls[j].vel = Balls[j].vel + 2 * (Balls[i].mass / (Balls[i].mass + Balls[j].mass)) * dot((Balls[i].vel - Balls[j].vel), ((Balls[i].pos - Balls[j].pos)/mag(Balls[i].pos - Balls[j].pos))) * ((Balls[i].pos - Balls[j].pos)/mag(Balls[i].pos - Balls[j].pos))
  46.                 Balls[i].pos = Balls[i].pos + Balls[i].vel * dt_prim
  47.                 Balls[j].pos = Balls[j].pos + Balls[j].vel * dt_prim
  48.         Balls[i].pos += Balls[i].vel*dt
  49.  
  50.     t += dt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement