Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sympy as sp
- import numpy as np
- # Definicja danych wejściowych
- r1 = 1.0 # średnica piłki 1
- m1 = 1.0 # masa piłki 1
- x1, y1, z1 = 0.0, 0.0, 0.0 # początkowe położenie piłki 1
- vx1, vy1, vz1 = 1.0, 1.0, 1.0 # prędkość piłki 1
- r2 = 1.0 # średnica piłki 2
- m2 = 1.0 # masa piłki 2
- x2, y2, z2 = 1.0, 1.0, 1.0 # początkowe położenie piłki 2
- vx2, vy2, vz2 = -1.0, -1.0, -1.0 # prędkość piłki 2
- # Promienie piłek
- R1 = r1 / 2
- R2 = r2 / 2
- # Promień sumaryczny do sprawdzenia kolizji
- R = R1 + R2
- # Zmienne czasowe
- t = sp.symbols('t')
- # Położenie piłek w funkcji czasu
- x1t = x1 + vx1 * t
- y1t = y1 + vy1 * t
- z1t = z1 + vz1 * t
- x2t = x2 + vx2 * t
- y2t = y2 + vy2 * t
- z2t = z2 + vz2 * t
- # Odległość między piłkami w funkcji czasu
- distance = sp.sqrt((x2t - x1t)**2 + (y2t - y1t)**2 + (z2t - z1t)**2)
- # Równanie kolizji
- collision_eq = sp.Eq(distance, R)
- # Rozwiązanie równania kolizji
- collision_time = sp.solve(collision_eq, t)
- collision_time = [t for t in collision_time if t >= 0]
- # Sprawdzenie, czy nastąpi kolizja
- if collision_time:
- t_collision = collision_time[0]
- # Punkt zderzenia
- x_collision = x1 + vx1 * t_collision
- y_collision = y1 + vy1 * t_collision
- z_collision = z1 + vz1 * t_collision
- collision_point = (x_collision.evalf(), y_collision.evalf(), z_collision.evalf())
- else:
- collision_point = None
- if collision_point:
- # Przeliczenie położenia w momencie kolizji
- x1_collision = x1 + vx1 * t_collision
- y1_collision = y1 + vy1 * t_collision
- z1_collision = z1 + vz1 * t_collision
- x2_collision = x2 + vx2 * t_collision
- y2_collision = y2 + vy2 * t_collision
- z2_collision = z2 + vz2 * t_collision
- # Wektor normalny w momencie zderzenia
- n = np.array([x2_collision - x1_collision, y2_collision - y1_collision, z2_collision - z1_collision]).astype(float)
- n = n / np.linalg.norm(n)
- # Wektory prędkości
- v1 = np.array([vx1, vy1, vz1])
- v2 = np.array([vx2, vy2, vz2])
- # Prędkości po zderzeniu
- v1_prime = v1 - (2 * m2 / (m1 + m2)) * np.dot(v1 - v2, n) * n
- v2_prime = v2 - (2 * m1 / (m1 + m2)) * np.dot(v2 - v1, n) * n
- new_velocities = (v1_prime, v2_prime)
- else:
- new_velocities = None
- print("Punkt kolizji:", collision_point)
- print("="*20)
- print("Nowa prędkość po zderzeniu:", new_velocities)
- --------------------------------------------------------------
- Punkt kolizji: (0.211324865405187, 0.211324865405187, 0.211324865405187)
- ====================
- Nowa prędkość po zderzeniu: (array([-1., -1., -1.]), array([1., 1., 1.]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement