Skrypt do pobrania:
{{ :narzedzia:apple_sim.py |}}
{{ :narzedzia:apple_sim_rr36t2xzdr.gif|}}
====== PY: Symulacja Masy Sprężystej ======
Ten artykuł wyjaśnia, jak działa skrypt symulujący ruch masy sprężystej pod wpływem grawitacji, wiatru oraz siły tarcia, z użyciem bibliotek ''%%Tkinter%%'', ''%%Matplotlib%%'' i ''%%NumPy%%''.
----
===== ⚙️ Stałe fizyczne i warunki początkowe =====
g = 9.81 # Przyspieszenie ziemskie (m/s^2)
m = 0.15 # Masa piłki (kg)
restitution = 0.7 # Współczynnik sprężystości (odbicia)
friction_coefficient = 0.5 # Współczynnik tarcia
Używamy podstawowych stałych z fizyki:
* Siła grawitacji: ( F_g = m g )
* Odbicie piłki od ziemi następuje z redukcją prędkości pionowej przez współczynnik sprężystości: $$ v_{y, \text{po}} = -v_{y, \text{przed}} \cdot e $$
----
===== 🧮 Obliczenia sił i przyspieszeń =====
==== Kod: ====
Fw = wind_force
ax_acc = Fw / m
ay_acc = -g
Zgodnie z II zasadą dynamiki Newtona:
* Siła wiatru generuje przyspieszenie poziome: $$ a_x = \frac{F_{\text{wiatr}}}{m} $$
* Przyspieszenie pionowe jest równe przyspieszeniu ziemskiemu: $$ a_y = -g $$
----
===== 🧠 Kinematyka ruchu =====
vx += ax_acc * time_step
vy += ay_acc * time_step
x += vx * time_step + 0.5 * ax_acc * time_step**2
y += vy * time_step + 0.5 * ay_acc * time_step**2
Używamy podstawowych równań kinematyki:
$$
v = v_0 + a \cdot \Delta t \\
s = s_0 + v \cdot \Delta t + \frac{1}{2} a \cdot \Delta t^2
$$
----
===== 🪨 Odbicie od ziemi i tarcie =====
if y <= y_min:
vy = -vy * restitution
if abs(vy) < 0.5:
vx -= \dots \text{(siła tarcia)}
Siła tarcia kinetycznego:
$$
F_{\text{tarcia}} = \mu \cdot m \cdot g \\
a_{\text{tarcia}} = \frac{F_{\text{tarcia}}}{m} = \mu \cdot g
$$
----
===== 📈 Wektory sił i wykresy =====
Kod rysuje wektory:
* Grawitacji – zawsze w dół
* Wiatru – poziomo
* Prędkości – dynamicznie
draw_arrow(x, y, vx * scale, vy * scale, 'purple')
----
===== 🧭 Wektory na wykresie biegunowym =====
draw_polar_arrow(polar_ax, angle, magnitude, color)
Ten fragment przelicza wartości sił i prędkości do współrzędnych biegunowych. Dzięki temu użytkownik może obserwować ich kierunki i względne wartości.
----
===== 📊 Wykresy prędkości i przyspieszenia =====
current_speed = np.sqrt(vx**2 + vy**2)
net_acc = np.sqrt(ax_acc**2 + ay_acc**2)
Wartości te są dodawane do list i rysowane w czasie rzeczywistym.
----
===== 🧵 Podsumowanie =====
Ten skrypt to przykład dynamicznej symulacji ruchu w dwuwymiarowym polu sił, uwzględniającej:
* Grawitację
* Wiatr jako siłę zewnętrzną
* Sprężystość przy zderzeniu z podłożem
* Tarcie dynamiczne przy niskiej prędkości
Dzięki interfejsowi graficznemu użytkownik może manipulować parametrami i obserwować efekty fizyczne w czasie rzeczywistym.