Bajtek 4/1985
Bajtek Redux nr 4/85

Ufff... pracę nad numerem czwartym, jak zwykle w wersji 0.5 zostały zakończone, tym samym zamknąłem wszystkie numery jakie ukazały się w formacie A5 i poprzedzały dużo formatowe wydawnictwo począwszy od numeru pierwszego z 1986 roku. Następny reduks ...

Zobacz stronę związaną z tym artykułem w Reduksach Try2emu
Spis treści:

LOAD

Roman Poznański

Lądowanie na księżycu

Kto z nas nie marzył o tym, by pilotować prawdziwy statek kosmiczny? Jeśli masz do dyspozycji jakikolwiek komputer, możesz sam stworzyć sobie taką możliwość, a przy okazji zyskasz satysfakcję z samodzielnego napisania programu.

Rzućmy się od razu na głęboką wodę, a więc spróbujmy wykonać najtrudniejszy element pilotażu — lądowanie. Ten manewr polega na odpowiednim wytrącaniu prędkości, w wyniku hamowania silnikami. Należy tak regulować siłę ciągu silników, aby pojazd — w chwili zetknięcia się z ziemią miał odpowiednio małą prędkość. W przeciwnym przypadku po prostu rozleci się na kawałki. Dodatkową trudnością jest ograniczona ilość paliwa, którą dysponujemy — jeśli nam go zabraknie to... lepiej nie myśleć.

Rozpoczniemy od stworzenia matematycznego modelu lądowania. Nasza rakieta znajduje się na wysokości H nad powierzchnią planety. Zakładamy, że wysokość ta jest znacznie mniejsza niż średnica planety, a więc jej zmiana nie ma znaczącego wpływu na wartość przyśpieszenia grawitacyjnego G. Dla uproszczenia pominiemy również wpływ tarcia w atmosferze. Ruch rakiety będzie się odbywał pod wpływem dwóch sił: przyciągania grawitacyjnego — przyśpieszenie G (stałe) i siły ciągu silników — przyspieszenie A.

Możemy przyjąć — bez większego błędu — że siła ciągu silników jest proporcjonalna do zużywanej w jednostce czasu porcji paliwa. Ponieważ w naszych rozważaniach będziemy operować umownymi jednostkami wielkości fizycznych, możemy założyć, że wartości liczbowe siły ciągu i masy porcji paliwa są równe (F).

Z drugiej zasady dynamiki wynika, że wartość przyspieszenia proporcjonalna jest do wywołującej go siły a odwrotnie proporcjonalna do masy ciała. Przyjmijmy — pamiętając o umowności naszych jednostek — że siła F wywołuje przyśpieszenie w pełni obciążonej rakiety A=F. Dla dowolnej masy przyśpieszenie przyjmie więc wartość:

A= F/((M+P)/(M+P0))

czyli:

A=(M+P0)F/(M+P) gdzie: M — masa rakiety bez paliwa P0 — początkowa masa paliwa P — chwilowa masa paliwa

Weźmy teraz pod uwagę odcinek czasu t i korzystając z wzorów opisujących ruch jednostajnie zmienny, obliczmy wysokość H i prędkość rakiety V, po upływie tego czasu:

Hk = HP + Vpt + (A—G) t2/2

Vk = Vp + (A—G)t indeksy p i k oznaczają odpowiednio początkowe i końcowe parametry ruchu.

Wystarczy teraz przyjąć, że odcinek czasu jest równy 1 (a czemu nie?) i możemy bezkarnie — już widzę miny nauczycieli fizyki — dodawać długość do prędkości i przśpieszenia.

Hk = Hp + Vp + (A—G)/2

Vk = Vp + A — G

Wiedząc jak obliczać parametry ruchu rakiety, możemy przystąpić do konstruowania programu symulującego lądowanie. Rzecz jasna, rozpoczniemy od schematu blokowego algorytmu. Nasz program będzie działał w pętli, każdy jej obieg odpowiada jednostce czasu (której wartość przyjęliśmy jako 1). Najpierw określamy warunki początkowe: a więc np. H = 1500, P = 200, V= —50 (ruch w dół), G = 4, M = 100. Następnie polecamy wydrukować tablicę przyrządów z aktualnymi parametrami lotu (kasując uprzednio ekran). Kolejna czynność, to sprawdzenie, czy któryś z klawiszy został wciśnięty i zapamiętanie odpowiadającego mu znaku, aż do momentu, gdy wciśnięty zostanie kolejny klawisz. Teraz komputer analizuje czy został wciśnięty któryś z klawiszy 1 - 6 (określanie siły ciągu silnika) i przypisuje odpowiednią wartość zmiennej F, która w naszym modelu oznacza zarówno moc silnika, jak i masę zużytego w jednostce czasu paliwa Q tę właśnie wartość zmniejszany zostaje zapas paliwa i następuje sprawdzenie, czy jeszcze coś zostało w zbiorniku. Jeśli w kolejnym obiegu pętli okaże się, że wyczerpaliśmy cały zapas, wówczas F przyjmuje wartość 0 i nie mamy żadnego wpływu na ruch rakiety.

Następna czynność to obliczenie wartości przyśpieszenia, wysokości, na której się znajdujemy i prędkości, z jaką się poruszamy. Oczywiście stosujemy wzory wyprowadzone na początku. Zwróćcie uwagę na kolejność obliczania parametrów! Pozostało jedynie sprawdzić, czy nie jesteśmy jeszcze na poziomie zerowym, a jeśli nie, to powrócić do instrukcji kasującej ekran i drukującej aktualną tablicę przyrządów.

Jeśli zaś okaże się, że nasza wysokość ma wartość ujemną (bądź jest równa zeru), znaczy to, iż już wylądowaliśmy i należy sprawdzić, czy prędkość rakiety mieści się w założonych tolerancjach. W zależności od wyniku testu otrzymujemy komunikat o sukcesie lub porażce. Na koniec tradycyjne pytanie: czy grasz dalej?

***

Program w wersji przedstawionej na wydruku zastał opracowany na wszystkie mikrokomputery z rodziny Commodore. W przypadku innych, należy dokonać kosmetycznych poprawek.

Jeśli chcemy uruchomić go na Spectrum, musimy zmienić wszystkie instrukcje podstawiania (stosując LET), uzupełnić linię 10 o instrukcję: LET B$ = " ", kasowanie ekranu w linii 20 zrealizować przez CLS, a linię 110 zmienić na A$= INKEY$.

W MERITUM wystarczy wprowadzić tylko dwie ostatnie poprawki.

Program został przedstawiony w wersji możliwie najprostszej ze względu na czytelność i możliwość łatwego prześledzenia jego działania a także, aby mógł być uruchomiony na dowolnym komputerze. Uzupełnienie go o elementy graficzne i dźwiękowe oraz rozwinięcie pozostawiam Czytelnikom.

I jeszcze pytanie sprawdzające, czy dokładnie prześledziliście działanie programu:

Czy można wyłączyć wszystkie silniki (siła ciągu =0)?

 

Roman Poznański

Czytaj także w dziale LOAD
„Lądowanie na księżycu”
Roman Poznański - Bajtek 4/1985

Kto z nas nie marzył o tym, by pilotować prawdziwy statek kosmiczny? Jeśli masz do dyspozycji jakikolwiek komputer, możesz sam stworzyć sobie taką możliwość, a przy okazji zyskasz satysfakcję z samodzielnego napisania programu.