Sfml, C++. Porusanie jednostką względem kątu
Ostatnio zmodyfikowano 2015-04-12 16:45
Szymon1177 Temat założony przez niniejszego użytkownika |
Sfml, C++. Porusanie jednostką względem kątu » 2015-04-12 14:10:23 Witam, mam mały problem z obliczeniem ruchu jednostki pod danym kątem. Na początku pobieram rotacje tzn kąt. postać jest skierowana w góre równo z osią y i to jej punkt 0. Załóżmy, że mamy sytuacje iż nasza jednostka obraca się pod kątem 45(zgodnie ze wskazowkami zegara czyli w prawo). Kąt 45 przeliczamy na radiany. 45*3.14/180= 0.785 rad i w sumie nie wiem co zrobić dalej ponieważ muszę to podać w innych jednostkach. Cały kod który znalazłęm w necie wygląda tak:
float rotacja = sprite.getRotation(); float vx = sin(( rotacja * M_PI ) / 180.0f ); float vy = -cos(( rotacja * M_PI ) / 180.0f ); sprite.move (speed*vx,speed*vy);
Wiem, że sin jest związany z osią x, a cos z y a jest ujemny ponieważ w programowaniu oś y zwiększa wartość w dół. Ale moje pytanie brzmi: Dlaczego sin odnosi wlasnie sie do x a cos do y? wiem ze sin=przypostokatna na przeciw kata a/przeciwprostokatna ale nie wiem co dalej z tego wywnioskowac. Zresszta sin(rad) wiec nie wiem jak sie do tego w ogole odniesc. I dlaczego w poruszaniu jest szybkość * sin załózmy a nie + czy / :) Liczę na dobrą odpowiedź :) Z góry dzięki :)
http://postimg.org/image/9ntzplbcv/ |
|
pekfos |
» 2015-04-12 14:26:28 Dlaczego sin odnosi wlasnie sie do x a cos do y? |
Odwrotnie. A odpowiedź masz w definicjach tych funkcji. I dlaczego w poruszaniu jest szybkość * sin załózmy a nie + czy / |
Ponownie, definicje.. Wartości tych funkcji to stosunek długości przyprostokątnych do przeciwprostokątnej (prędkości). Mnożysz sin/cos przez prędkość, by otrzymać przesunięcia wzdłuż osi współrzędnych. |
|
Brunon3 |
» 2015-04-12 16:45:59 Tak na przyszłość; kod dawaj w znaczniki [cpp] kod [/cpp], a linki w znacznik [a href="link"]. ;)
-BD. |
|
« 1 » |