Zadanie

Matúš si chce užiť posledné zvyšky leta pred tým, ako sa mu začne semester. Rozhodne sa kúpiť si čerešne, lebo tie cez zimu nie sú. Sadne si s nimi na hojdačku dĺžky \(l = \SI{4}{\metre}\) a začne sa hojdať s maximálnou uhlovou výchylkou \(\alpha = \ang{45}\). Tu si ale uvedomí, že nevie, čo s kôstkami. Našťastie je pred ním kôš, a tak sa snaží pri hojdaní trafiť do koša. Tu si všimne, že vzdialenosť, do ktorej kôstku dopľuje, sa mení podľa toho, v ktorom momente ju vypľuje.

Pod akým uhlom sa musí hojdačka nachádzať v momente, keď Matúš vypľuje kôstku, aby kôstka doletela do najväčšej možnej vzdialenosti? Aká vzdialenosť to je? Sediaci Matúš meria \(H = \SI{1}{\metre}\), kôstky vypľúva rýchlosťou \(v = \SI{1}{\metre\per\second}\) a hojdačka v pokoji sa nachádza \(h = \SI{0.5}{\metre}\) nad zemou.

Uvažujte, že kôstky sú oveľa ľahšie ako Matúš a Matúš ich vie pľuť ľubovoľným smerom. Pri riešení tejto úlohy sa nebojte použiť výpočtový softvér (napríklad Excel).

Matúša budeme v rámci výpočtu uvažovať ako hmotný bod, ktorý sa hojdá na húpačke.1 Aj keď celú hmotnosť dáme do jedného bodu, musíme pamätať, že ústa, z ktorých vypľúva kôstky, nie sú v rovnakej vzdialenosti od osi otáčania. Ústa sú pravdepodobne \(a = \SI{0.5}{\metre}\) nad hojdačkou v pokoji a nohy sa tesne nedotýkajú zeme. Jeho tažisko dáme do stredu jeho výšky keď sedí, a teda \(l = \SI{4}{\metre}\) od osi otáčania.

Na to, aby sme vypočítali let kôstky, potrebujeme poznať Matúšovu rýchlosť v okamihu, keď ju vypľuje. Tú vieme zistiť zo zákona zachovania mechanickej energie. Keď je Matúš vychýlený o maximálny uhol, celá jeho energia je vo forme potenciálnej energie. V iných momentoch to je súčet jeho potenciálnej a kinetickej energie. Ak uvážime nulovú potenciálnu hladinu v momente, keď je hojdačka najnižšie, dostávame \[ E_\text{c} = mg l (1-\cos \ang{45}) = \frac{1}{2}mu^2 + mg l (1 - \cos \varphi), \qquad(1)\] kde \(m\) je Matúšova hmotnosť, \(u\) jeho rýchlosť a \(\varphi\) jeho aktuálna výchylka. Z tejto rovnosti vieme vyjadriť \(v\) ako funkciu \(\varphi\), pričom dostávame \[ u = \sqrt{2 g l (\cos \varphi - \cos \ang{45})}. \qquad(2)\] Takto ale dostávame rýchlosť hmotného bodu, ktorým aproximujeme Matúša. Nás v skutočnosti ale zaujíma rýchlosť jeho úst. Keďže obe tieto veci vykonávajú pohyb po kružnici rovnakou uhlovou rýchlosťou, rýchlosť úst dostaneme, ak rýchlosť hmotného bodu prenásobíme pomerom ich vzdialeností od osi otáčania. Preto počiatočná rýchlosť kôstky (udelená pohybujúcou sa hojdačkou) je \[ w = \sqrt{2 g l (\cos \varphi - \cos \ang{45})} \frac{l - a}{l}. \qquad(3)\]

S touto znalosťou už vieme napísať počiatočné podmienky pre kôstku. Hodnoty súradníc \(x\) a \(y\)\[ \begin{aligned} x_0 &= (l - a)\sin\varphi, \\ y_0 &= h + l - (l - a)\cos\varphi \end{aligned} \qquad(4)\] a rýchlosť je \[ \begin{aligned} v_\text{x} &= w\cos\varphi + v\cos\theta, \\ v_\text{y} &= w\sin\varphi + v\sin\theta, \end{aligned} \qquad(5)\] kde \(\theta\) je uhol s horizontálou, pod ktorým Matúš vypľuje kôstku.

Keď Matúš kôstku vypľuje, ide o šikmý vrh. Jej okamžitú výšku vieme vypočítať ako: \[ y = y_0 + v_\text{y} t - \frac{1}{2}gt^2. \qquad(6)\] Zaujíma nás čas, kedy kôstka dopadne na zem, resp. pri akom čase nastane \(y = 0\). Tým dostávame kvadratickú rovnicu pre čas \(t\) \[ t_\text{d} = \frac{-v_\text{y} \pm \sqrt{v_\text{y}^2 + 2gy_0}}{-g} = \frac{v_\text{y} + \sqrt{v_\text{y}^2 + 2gy_0}}{g}. \qquad(7)\] Vyberieme riešenie s mínusom, lebo vieme, že čas má vyjsť kladný.2 Teraz už vieme, ako dlho kôstka letela. Vzdialenosť, do ktorej dopadne je preto \[ d = x_0 + v_\text{x}t_\text{d}. \qquad(8)\] Môžeme do tohto vzorca začať dosadzovať, no už prvého pohladu vidíme, že výsledný výraz by bol dlhý. Keďže nás zaujíma len výsledok, tak sa tejto robote vyhneme.

Teraz ostáva už len vypočítať túto vzdialenosť pre rôzne kombinácie uhlov \(\varphi\) a \(\theta\). Túto prácu prenecháme počítaču. Konkrétne krátkemu skriptu napísanému v jazyku Python, ktorý tieto vzdialenosti vypočíta a nájde medzi nimi tú najväčšiu. Taký skript vyzerá napríklad takto:

# importujeme funkcie sin, cos, sqrt a hodnotu pi, aby sme ich mohli použiť
from math import sin, cos, pi, sqrt

# vytvoríme premenné pre zadané konštanty a naše vytvorené konštanty
g, l, v, h, a = 9.81, 4, 1, 0.5, 0.5
# sem budeme ukladať priebežne najväčšiu vzdialenosť a uhol, pri ktorom bola dosiahnutá
max, mphi, mtheta = 0, 0, 0

# prejdeme cez všetky možné kombinácie phi a theta
# (presnosť máme aktuálne 0,1 stupňa, preto ideme až po 451(901) a potom delíme 10)
for phi in range(0, 451):
    for theta in range(0, 901):
        # premeníme ich na radiány, lebo s nimi rátajú naše funkcie sin a cos
        phir, thetar = phi/10/360*2*pi, theta/10/360*2*pi
        # nastavíme počiatočné podmienky
        x0 = (l - a) * sin(phir)
        y0 = h + l - (l - a) * cos(phir)
        w = sqrt(2 * g * l * (cos(phir) - cos(pi/4))) * ((l - a) / l)
        vx = w*cos(phir) + v*cos(thetar)
        vy = w*sin(phir) + v*sin(thetar)

        # vypočítame čas dopadu a vzdialenosť dopadu
        td = (vy + sqrt(vy**2 + 2*g*y0))/(g)
        d = x0 + vx*td

        # skontrolujeme, či nešlo náhodou o novú maximálnu hodnotu,
        # ak áno zapíšeme si ju
        if d > max:
            max = d
            mphi = phi
            mtheta = theta

# po tom, ako pre každú kombináciu vypočítame vzdialenosť, vypíšeme tú maximálnu
print(f"""Kôstka doletí najďalej {max:.6f} metra.
V momente, keď ju vypľujeme, hojdačka bude zvierať uhol {mphi/10}° s vertikálou.
Matúš vtedy vypľuje kôstku pod uhlom {mtheta/10}° voči horizontále.""")

# ak by sme chceli vypísať hodnotu pre konkrétne celočíslené 'phi', 'theta', použijeme
# print(vysledok[phi][theta])

Po spustení programu zisťujeme, že najlepšie je kôstku vypľuť, keď je hojdačka vychýlená o uhol \(\ang{29}\) a kôstku vyplujeme pod uhlom \(\ang{32.4}\) voči horizontále.


  1. Presnejšie priblíženie by bolo fyzikálne kyvadlo s nerovnomerne rozloženou hustotou. Kedže zadanie ale neudáva Matúšovu hmotnosť, takýto výpočet nebudeme robiť.↩︎

  2. Záporné riešenie je, ak by sme išli v čase späť.↩︎

Diskusia

Tu môžte voľne diskutovať o riešení, deliť sa o svoje kusy kódu a podobne.

Pre pridávanie komentárov sa musíš prihlásiť.