Zastanawiam się nad stworzeniem lądownika, w którym kontrolujesz statek kosmiczny i musisz wylądować bez rozbicia. Jaka jest prosta formuła do obliczania prędkości spadania lub przyspieszenia w odniesieniu do czasu pracy silników do czasu?
Najprostszym sposobem jest integracja Eulera. Musisz zapisać wektor pozycji i wektor prędkości. W każdej ramce:
( x dla skalarów, X dla wektorów)
upewnij się, że dt jest mały ...
| G | wynosi około 9,8 m / s² dla ziemi i około 1,6 m / s² dla księżyca
ogólnie siła oddziałująca z powodu oddziaływania grawitacyjnego wynosi:
Wpływa na każde ciało i wskazuje na drugie.
G skalarną jest bardzo znany stała grawitacyjna jest o 6.67e-011 N (m / kg) ²
Ponieważ jesteś zainteresowany przyspieszeniem:
Musisz tylko znać masę planety (m2) i promień (r), aby obliczyć swoje przyspieszenie.
Zazwyczaj przyspieszenie, które przesuwa planetę w kierunku twojego statku kosmicznego, jest nieznaczne, ponieważ zwykle m1 jest nieznaczne w porównaniu do m2.
Jeśli jednak próbujesz wylądować na małej asteroidzie, prawdopodobnie musisz użyć ogólnej formuły dodającej tę siłę do wektora siły całkowitej w drugim etapie.
EDYTOWAĆ:
Zgodnie z wymaganiami podpowiedź na temat implementacji. Będziesz potrzebować:
Przede wszystkim biblioteka wektorów: twoja gra może być mono / bi / tree / four ... wymiarowa, o ile uważasz, że twoja skrzynka jest projekcją słowa 3D, fizyczne roule trzymają.
Jeśli n jest wybranym przez Ciebie wymiarem (prawdopodobnie 2 lub 3 w twoim przypadku), biblioteka musi mieć:
Możesz użyć biblioteki, która to robi lub zaimplementować ją samodzielnie; wektor może być strukturą lub klasą, wybór należy do ciebie.
Każdy silnik powinien być opisany przez:
Twój wkład użytkownika zostanie wykorzystany do podania każdemu silnikowi liczby, która będzie między 0 (nieużywany silnik) a 1 (pełna moc): współczynnik silnika (zużycie).
Pomnóż współczynnik silnika dla jego wektora ciągu, aby uzyskać prawdziwe zaufanie silnika i zsumować wszystkie wyniki wszystkich dostępnych silników; to da ci F drugiego kroku.
Współczynnik silnika można wykorzystać do określenia rzeczywistego zużycia paliwa dla każdego silnika: pomnóż współczynnik silnika przez zużycie paliwa i przez dt, aby poznać chwilowe zużycie paliwa; możesz odjąć tę wartość od zmiennej całkowitej pojemności paliwa (daje to możliwość zaktualizowania całkowitej masy m, jeśli masa paliwa jest znaczna).
Teraz możesz kontynuować korzystanie z integracji w celu obliczenia nowej pozycji, sprawdź kolizję z powierzchnią twojej planety; jeśli występuje, użyj długości wektora prędkości, aby powiedzieć, czy lądowanie zakończyło się sukcesem czy katastrofą.
Oczywiście można / należy wykonać inne kontrole kolizji, niektóre obiekty powierzchniowe nie mogą być dozwolone jako punkt lądowania, więc każda kolizja jest śmiertelna.
Pozostawiam, jak uzyskać wkład i jak oddać wam swój statek kosmiczny; możesz na przykład użyć współczynnika silnika do renderowania stanu silnika klatka po klatce.
Ponieważ druga doskonała odpowiedź wydaje się nieco teoretyczna, oto prosta wersja kodu:
źródło
Niestety, matematyka tutaj staje się owłosiona. Odpowiedź FxIII jest dobra dla ogólnego przypadku spadającego obiektu, ale mówisz o rakiecie - i rakiety spalają paliwo.
Widziałem kod, który to robi, ale był całkowicie nieudokumentowany i nigdy nie udało mi się zrozumieć matematyki. Chyba że masz jakieś ograniczenia procesora, nie zawracałbym sobie głowy i po prostu brutalną siłą - podejście FxIII zastosowane w dość krótkim przedziale czasu i wyregulowanie ciągu (lub zużycia paliwa, jeśli zorientujesz się, że rakieta dławi się, gdy paliwo pali się, aby utrzymać określone przyspieszenie zamiast określonego ciągu) między każdą iteracją, gdy rakieta spala paliwo.
źródło