Autor Wątek: Zwracanie się postaci w kierunku kursora.  (Przeczytany 919 razy)

Offline xxczesterxx

  • Użytkownik

# Maj 16, 2012, 19:40:25
Jak sprawić, żeby postać była zwrócona w kierunku kursora? Siedze nad tym od dobrych tygodni. Myślałem, że da rade ominąć to zagadnienie, ale nie. Próbowałem sinusem obliczać kąty, ale wtedy nieprzyjemnie przeskakuje między ćwiartkami osi współrzędnych. Np. mam punkt, który odzwierciedla położenie myszy {m.x, m.y}, i strukture Box {x, y, w, h}. I robię to w ten sposób, że sprawdzam, w której ćwiartce się znajduje ten punkt.
if(Box.X > poss.X)
    {

        if(Box.Y < poss.Y)
        {

            rotation = (Box.X - m.X)/sqrt((Box.X - m.X)*(Box.X - m.X) + (Box.Y - m.Y)*(Box.Y - m.Y)) * 57.2957795 ; 
        }
}
To kawałek kodu. Zamieszczona funkcja sqrt oblicza przeciwprostokątną trójkąta, a ta 57.29... zamienia radiany na stopnie. Ale jak już mówiłem, to nie najlepszy sposób. Dla tego zwracam się do was z prośbą o pomoc. Kolejność odejmowania nie jest tutaj błędem, sprawdzałem wszystkie kombinacje xD.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ShadowDancer

  • Redaktor

# Maj 16, 2012, 19:48:44
Atan 2

Offline Vipa

  • Redaktor

# Maj 16, 2012, 19:51:04
#define piover180 0.0174532925f
rotation = atan2(m.X - Box.X, m.Y - Box.Y) / piover180;

Offline xxczesterxx

  • Użytkownik

# Maj 16, 2012, 20:49:06
Wielkie dzięki :D Pomogło. Musiałem jeszcze dodać rotation *= -1; bo piszę w sfml + openGl. Temat do zamknięcia