Załóżmy, że masz obiekt swobodnie unoszący się w przestrzeni. Masz wektor, na który ma wskazywać ten obiekt, oraz wektor reprezentujący kierunek, w którym obecnie jest skierowany. Z tych dwóch można uzyskać obrót (macierz, czwartorzęd, cokolwiek), który reprezentuje zmianę orientacji w celu dostosowania dwóch wektorów.
Jeśli masz tylko możliwość zastosowania momentu obrotowego (pochodnej prędkości kątowej) do swojego obiektu, jaki jest dobry algorytm do zastosowania momentu obrotowego w czasie, który nie przekroczy / nie przekroczy celu?
(W tym przypadku jest to statek kosmiczny, który chce automatycznie ustawić się w kierunku podróży za pomocą silników odrzutowych. Rzut nie ma znaczenia.)
physics
orientation
Karantza
źródło
źródło
Odpowiedzi:
Można to traktować podobnie jak w przypadku przyspieszenia liniowego.
Pierwszy fakt, na który należy zwrócić uwagę: ponieważ statek zaczyna od prędkości kątowej równej zero, a chcesz, aby skończył się z prędkością kątową równą zero, oznacza to, że całkowita zmiana prędkości musi wynosić zero.
Z tego wynika, że całka przyspieszenia w czasie musi wynosić zero - musi być dokładnie tyle samo „dużo” przyspieszenia dodatniego, ile jest przyspieszenia ujemnego.
Dlatego każde rozwiązanie musi być ograniczone do tej właściwości: równe „całkowite” przyspieszenie do przodu i do tyłu.
Oto, jak powinien wyglądać kształt wykresu przyspieszenia w czasie:
Patrząc na to, istnieje wiele możliwych form i kształtów, w których może znajdować się Twoje przyspieszenie! Dokonajmy pewnych założeń dotyczących pożądanego kształtu przyspieszenia, aby dać łatwą / zwięzłą odpowiedź.
Dla prostej odpowiedzi będę miał przyspieszenie w jednym z trzech stanów: do przodu, do tyłu lub zero. Naprzód i wstecz będą miały taką samą wielkość, a stany mogą być przełączane natychmiast. (nie ma stopniowego zwiększania przyspieszenia)
Za pomocą tego równania możesz znaleźć zmianę odległości dla danego przyspieszenia w danym okresie czasu:
Najprostszym rozwiązaniem byłoby przyspieszenie, aż dojdziesz do połowy, a następnie spowolnienie do końca.
Przyjmiemy
P
jako całkowity dystans, który chcesz przemieścić:Więc w zasadzie:
a
dlasqrt(P/a)
jednostek czasu (jednostki oparte na twoich jednostkach dla przyspieszenia)To nie jedyne rozwiązanie. Dostaniesz się tam w jak najkrótszym czasie (
2*sqrt(P/a)
). Ale co, jeśli chcesz bardziej zrelaksowaną wersję?W takim przypadku możesz przyspieszyć 1/3 drogi, wybiegać do 1/3 i spowolnić resztę trzeciej. Lub 1/4, wybieg na 1/2, zwalniaj również 1/4.
A może możesz przyspieszyć przez określony czas, a następnie spowolnić przez określony czas, ale zaczekaj, aż dojdziesz do dokładnej pozycji, zanim zaczniesz zwalniać.
źródło