Poruszanie obiektem na podstawie rotacji

Jak wyliczyć wektor przemieszczenia posiadając jedynie jego rotację?

Ten wpis jest poniekąd uzupełnieniem teorii matematycznej z Piszemy grę w SFML’u::Lekcja 2.

 

Opis i część matematyczna problemu


Naszym celem jest obliczenie 2-wymiarowego wektora, który pozwoli nam na obliczenie wektora przemieszczenia jedynie na podstawie jego rotacji podanego w stopniach.

angle-movement

Jak widzimy nie jest to tradycyjny układ kartezjański do jakiego jesteśmy przyzwyczajeni, lecz jego odbicie względem osi OY, czyli mamy dokładnie ten układ wg którego jest (zazwyczaj) liczona pozycja w komputerach.

Jesteśmy w stanie zauważyć, że w zasadzie pracujemy na trójkącie, w którym znamy 2 z jego 3 kątów: mamy kąt prosty oraz kąt ω, który jest kątem obrotu względem pozycji startowej. Rysunek pokazuje, że wektor przemieszczenia to przeciwprostokątna trójkąta.

Wykorzystując podstawową wiedzę matematyczną jesteśmy w stanie wyprowadzić wzór na wektor leżący na tej prostej posługując się jedynie kątami i funkcjami trygonometrycznymi. Uzyskamy następujący wzór dla układu kartezjańskiego:

u = (sinω, cosω)

Jednak pamiętamy, że nasz układ jest odbiciem układu kartezjańskiego względem osi OY, czyli rozwiązaniem naszego problemy jest równanie:

u’ = (sinω, -cosω)

Poruszanie się


Skoro wiemy już jak wyznaczyć taki wektor, to większość roboty mamy już z głowy (jeżeli nawet nie całą), dlatego przykładowy kod (napisany w c++ i SFML) pozostawiam do samodzielnej analizy (nie ma tam niczego, czego nie omówiłem choćby we wcześniejszych wpisach, jeżeli nie wiesz do czego służy delta, to zapraszam tutaj).

Code ON!