Narzędzia użytkownika

Narzędzia witryny


narzedzia:apple_sim_py

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
narzedzia:apple_sim_py [2025/05/07 11:55] – created administratornarzedzia:apple_sim_py [2025/05/16 18:48] (aktualna) administrator
Linia 1: Linia 1:
-\====== Symulacja Masy Sprężystej z Użyciem Tkinter i Matplotlib ======+Skrypt do pobrania: 
 +{{ :narzedzia:apple_sim.py |}}
  
-Ten artykuł wyjaśnia działanie interaktywnej symulacji fizycznej przedstawiającej spadającą kulę, uwzględniającej siły takie jak grawitacja, tarcie i wiatr. Symulacja ta została zaimplementowana w Pythonie z użyciem bibliotek **Tkinter** i **Matplotlib**. Omówimy jej działanie, wspierając się wzorami fizycznymi oraz blokami kodu.+{{ :narzedzia:apple_sim_rr36t2xzdr.gif|}}
  
-\===== Koncepcja Fizyczna =====+====== PY: Symulacja Masy Sprężystej ======
  
-Symulowana jest cząstka o masie \$m = 0.15\$ kg poruszająca się w dwuwymiarowej przestrzeni pod wpływem:+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%%''.
  
-* siły ciążenia: 
  
-$$ +----
-F_g = m \cdot g +
-$$+
  
-* siły wiatru (stała, zadawana suwakiem):+===== ⚙️ Stałe fizyczne i warunki początkowe =====
  
-$$ +<code python> 
-F_w \text{stała} \in \langle -2, 2 \rangle \ \text{[N]} +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 
 +</code>
  
-* siły tarcia (działającej przy kontakcie podłożem):+Używamy podstawowych stałych fizyki:
  
-$$ +  * Siła grawitacji: ( F_g = m g ) 
-F_t = \mu \cdot m \cdot 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 $$
-$$+
  
-Ruch cząstki opisany jest przez drugą zasadę dynamiki Newtona: 
  
-$$ +----
-\vec{a} = \frac{\vec{F}}{m} +
-$$+
  
-\===== Inicjalizacja Symulacji =====+===== 🧮 Obliczenia sił i przyspieszeń ===== 
 + 
 +==== Kod: ====
  
 <code python> <code python>
-def reset_simulation(): +Fw wind_force 
-    global x, y, vx, vy, trace, sim_time, time_list, speed_list, acc_list +ax_acc Fw / m 
-    x, y = 0, 30  # Start higher in the bigger graph +ay_acc -g
-    vx, vy = 0, 0  # Reset velocities +
-    trace = []     # Reset trace +
-    sim_time = 0.0 +
-    time_list [] +
-    speed_list [] +
-    acc_list []+
 </code> </code>
  
-Tutaj ustalamy początkowe warunkikulka znajduje się na wysokości 30 m i nie porusza się (zerowe prędkości). Resetowane są także listy do wykresów czasowych.+Zgodnie z II zasadą dynamiki Newtona:
  
-\===== Obliczenia Dynamiki Ruchu =====+  * Siła wiatru generuje przyspieszenie poziome: $$ a_x = \frac{F_{\text{wiatr}}}{m} $$ 
 +  * Przyspieszenie pionowe jest równe przyspieszeniu ziemskiemu: $$ a_y -g $$
  
-<code python> 
-ax_acc = Fw / m      # Horizontal acceleration due to wind 
-ay_acc = -g          # Vertical acceleration (gravity) 
  
-vx += ax\_acc \* time\_step +----
-vy += ay\_acc \* time\_step+
  
-x +vx \* time\_step + 0.5 \* ax\_acc \* time\_step**2 +===== 🧠 Kinematyka ruchu =====
-y +vy \* time\_step + 0.5 \* ay\_acc \* time\_step**2 </code>+
  
-Przy każdym kroku czasowym obliczane są przyspieszenia ze wzoru:+<code python> 
 +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 
 +</code> 
 + 
 +Używamy podstawowych równań kinematyki:
  
 $$ $$
-a_x = \frac{F_w}{m}\quad a_y = -g+v_0 + a \cdot \Delta t \\ 
 +s = s_0 + v \cdot \Delta t + \frac{1}{2\cdot \Delta t^2
 $$ $$
  
-Po czym aktualizujemy prędkości i pozycje na podstawie równań ruchu: 
  
-$$ +----
-\vec{v}_{t+\Delta t} = \vec{v}_t + \vec{a} \cdot \Delta t +
-$$ +
- +
-$$ +
-\vec{r}_{t+\Delta t} = \vec{r}_t + \vec{v} \cdot \Delta t + \frac{1}{2} \vec{a} \cdot \Delta t^2 +
-$$+
  
-\===== Odbicia Tarcie =====+===== 🪨 Odbicie od ziemi tarcie =====
  
 <code python> <code python>
 if y <= y_min: if y <= y_min:
-    y = y_min 
     vy = -vy * restitution     vy = -vy * restitution
-    ... +    if abs(vy) < 0.5: 
-    friction_acc friction_coefficient * g+        vx -\dots \text{(siła tarcia)}
 </code> </code>
  
-Kiedy kulka uderza w ziemię, następuje odbicie ze współczynnikiem sprężystości (domyślnie 0.7):+Siła tarcia kinetycznego:
  
 $$ $$
-v_y \rightarrow -v_y \cdot e+F_{\text{tarcia}} = \mu \cdot m \cdot g \\ 
 +a_{\text{tarcia}} = \frac{F_{\text{tarcia}}}{m} = \mu \cdot g
 $$ $$
  
-Jeśli prędkość pionowa jest niska, dodawane jest przyspieszenie tarcia, redukujące prędkość poziomą: 
  
-$$ +----
-a_{\text{tarcie}} = \mu \cdot g +
-$$+
  
-\===== Wektory Sił =====+===== 📈 Wektory sił i wykresy =====
  
-Symulacja przedstawia wektory: grawitacji, wiatru i prędkości.+Kod rysuje wektory: 
 + 
 +  * Grawitacji – zawsze w dół 
 +  * Wiatru – poziomo 
 +  * Prędkości – dynamicznie
  
 <code python> <code python>
-draw_arrow(x, y, 0-1, 'blue'     # Gravity +draw_arrow(x, y, vx * scalevy * scale, 'purple') 
-...</code>+</code> 
 + 
 + 
 +----
  
-Dodatkowo, rysowane są na wykresie biegunowym (polar plot):+===== 🧭 Wektory na wykresie biegunowym =====
  
 <code python> <code python>
-draw_polar_arrow(polar_ax, gravity_anglegravity_magnitude'blue', 'Gravity')+draw_polar_arrow(polar_ax, anglemagnitudecolor)
 </code> </code>
  
-Wartości te są konwertowane na postać biegunową:+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.
  
-$$ 
-\theta = \arctan2(v_y, v_x), \quad r = |\vec{v}| 
-$$ 
  
-\===== Wykresy Prędkości i Przyspieszenia =====+---- 
 + 
 +===== 📊 Wykresy prędkości i przyspieszenia =====
  
 <code python> <code python>
-line_speed.set_data(time_list, speed_list+current_speed = np.sqrt(vx**2 + vy**2
-line_acc.set_data(time_list, acc_list)+net_acc = np.sqrt(ax_acc**2 + ay_acc**2)
 </code> </code>
  
-Podczas symulacji zapisywana jest prędkość:+Wartości te są dodawane do list i rysowane w czasie rzeczywistym.
  
-$$ 
-| ec{v}| = \sqrt{v_x^2 + v_y^2} 
-$$ 
  
-i wartość przyspieszenia:+----
  
-$$ +===== 🧵 Podsumowanie =====
-|\vec{a}| \sqrt{a_x^2 + a_y^2} +
-$$+
  
-Są one rysowane czasie jako funkcje.+Ten skrypt to przykład dynamicznej symulacji ruchu dwuwymiarowym polu sił, uwzględniającej:
  
-\===== Interfejs Użytkownika =====+  * Grawitację 
 +  * Wiatr jako siłę zewnętrzną 
 +  * Sprężystość przy zderzeniu z podłożem 
 +  * Tarcie dynamiczne przy niskiej prędkości
  
-Tkinter obsługuje:+Dzięki interfejsowi graficznemu użytkownik może manipulować parametrami i obserwować efekty fizyczne w czasie rzeczywistym.
  
-* suwaki do zmiany siły wiatru i współczynnika sprężystości 
-* przycisk resetu symulacji 
-* pole tekstowe z informacjami w czasie rzeczywistym 
- 
-<code python> 
-wind_slider = tk.Scale(...) 
-spring_slider = tk.Scale(...) 
-</code> 
  
-\===== Podsumowanie ===== 
  
-Symulacja w przystępny sposób ukazuje podstawowe zjawiska fizyczne takie jak siła ciążenia, tarcie, odbicia i ruch z siłą zewnętrzną. Wykorzystuje do tego animację, wykresy i reprezentacje wektorowe. Kod można łatwo rozbudować o dodatkowe efekty fizyczne lub rozszerzyć na inne układy mechaniczne. 
  
narzedzia/apple_sim_py.1746611720.txt.gz · ostatnio zmienione: 2025/05/07 11:55 przez administrator