Advertisement
jarekmor

punkt_kolizji

Jun 30th, 2024 (edited)
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.62 KB | None | 0 0
  1. import sympy as sp
  2. import numpy as np
  3.  
  4. # Definicja danych wejściowych
  5. r1 = 1.0   # średnica piłki 1
  6. m1 = 1.0   # masa piłki 1
  7. x1, y1, z1 = 0.0, 0.0, 0.0  # początkowe położenie piłki 1
  8. vx1, vy1, vz1 = 1.0, 1.0, 1.0  # prędkość piłki 1
  9.  
  10. r2 = 1.0   # średnica piłki 2
  11. m2 = 1.0   # masa piłki 2
  12. x2, y2, z2 = 1.0, 1.0, 1.0  # początkowe położenie piłki 2
  13. vx2, vy2, vz2 = -1.0, -1.0, -1.0  # prędkość piłki 2
  14.  
  15. # Promienie piłek
  16. R1 = r1 / 2
  17. R2 = r2 / 2
  18.  
  19. # Promień sumaryczny do sprawdzenia kolizji
  20. R = R1 + R2
  21.  
  22. # Zmienne czasowe
  23. t = sp.symbols('t')
  24.  
  25. # Położenie piłek w funkcji czasu
  26. x1t = x1 + vx1 * t
  27. y1t = y1 + vy1 * t
  28. z1t = z1 + vz1 * t
  29.  
  30. x2t = x2 + vx2 * t
  31. y2t = y2 + vy2 * t
  32. z2t = z2 + vz2 * t
  33.  
  34. # Odległość między piłkami w funkcji czasu
  35. distance = sp.sqrt((x2t - x1t)**2 + (y2t - y1t)**2 + (z2t - z1t)**2)
  36.  
  37. # Równanie kolizji
  38. collision_eq = sp.Eq(distance, R)
  39.  
  40. # Rozwiązanie równania kolizji
  41. collision_time = sp.solve(collision_eq, t)
  42. collision_time = [t for t in collision_time if t >= 0]
  43.  
  44. # Sprawdzenie, czy nastąpi kolizja
  45. if collision_time:
  46.     t_collision = collision_time[0]
  47.    
  48.     # Punkt zderzenia
  49.     x_collision = x1 + vx1 * t_collision
  50.     y_collision = y1 + vy1 * t_collision
  51.     z_collision = z1 + vz1 * t_collision
  52.    
  53.     collision_point = (x_collision.evalf(), y_collision.evalf(), z_collision.evalf())
  54. else:
  55.     collision_point = None
  56.  
  57. if collision_point:
  58.     # Przeliczenie położenia w momencie kolizji
  59.     x1_collision = x1 + vx1 * t_collision
  60.     y1_collision = y1 + vy1 * t_collision
  61.     z1_collision = z1 + vz1 * t_collision
  62.  
  63.     x2_collision = x2 + vx2 * t_collision
  64.     y2_collision = y2 + vy2 * t_collision
  65.     z2_collision = z2 + vz2 * t_collision
  66.  
  67.     # Wektor normalny w momencie zderzenia
  68.     n = np.array([x2_collision - x1_collision, y2_collision - y1_collision, z2_collision - z1_collision]).astype(float)
  69.     n = n / np.linalg.norm(n)
  70.  
  71.     # Wektory prędkości
  72.     v1 = np.array([vx1, vy1, vz1])
  73.     v2 = np.array([vx2, vy2, vz2])
  74.  
  75.     # Prędkości po zderzeniu
  76.     v1_prime = v1 - (2 * m2 / (m1 + m2)) * np.dot(v1 - v2, n) * n
  77.     v2_prime = v2 - (2 * m1 / (m1 + m2)) * np.dot(v2 - v1, n) * n
  78.  
  79.     new_velocities = (v1_prime, v2_prime)
  80. else:
  81.     new_velocities = None
  82.  
  83. print("Punkt kolizji:", collision_point)
  84. print("="*20)
  85. print("Nowa prędkość po zderzeniu:", new_velocities)
  86.  
  87. --------------------------------------------------------------
  88. Punkt kolizji: (0.211324865405187, 0.211324865405187, 0.211324865405187)
  89. ====================
  90. Nowa prędkość po zderzeniu: (array([-1., -1., -1.]), array([1., 1., 1.]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement