Rotacja obiektu względem vectora

0

Witam
W jaki sposób mogę uzyskać kąt rotacji obiektu względem vectora 2D?
Np.
1. Vec = [1,0], Rotation = 90
2. Vec = [0,1], Rotation = 180
3. Vec = [2,3], Rotation = ?
user image

0

matematyki w szkole nie miałeś? Nie wiesz co to sinus/cosinus?

0

Matematykę miałem i nadal mam, jednak trygonometrię zaczęliśmy pod koniec ubiegłego roku i w tym będziemy ją kończyć (II klasa liceum).

Poszukałem trochę i funkcję napisałem, jednak obiekty znajdujące się po przeciwnej stronie są zwrócone tyłem.
Co w poniższym kodzie jest błędne?

            float V_X = Enemy_B.get(Target).GetX() - X;
            float V_Y = Enemy_B.get(Target).GetY() - Y;
            float Distance = (float)Math.sqrt(V_X * V_X + V_Y * V_Y);
            float Percent = (Speed * Time) / Distance;

            X += V_X * Percent;
            Y += V_Y * Percent;

            float Tan = V_Y / V_X;

            Rotation = (float)Math.toDegrees(Math.atan(Tan));

Enemy_B.get(Target).GetX() - Współrzędna X przeciwnika
Enemy_B.get(Target).GetY() - Współrzędna Y przeciwnika
X - Współrzędna X pocisku
Y - Współrzędna Y pocisku

user image

0

Nie wiem czy do końca rozumiem to co napisałeś i ten obrazek, ale chyba wystarczy, że odwrócisz współrzędną y przed wyliczeniem Tan.
Po prostu możesz mieć inny układ współrzędnych (zwroty osi) niż framework/biblioteka, którą rysujesz.

0

Odwrócenie współrzędnej Y nie pomogło, jednak znalazłem prosty sposób na rozwiązanie problemu:
if (V_X >= 0) Rotation += 180;

1

kąt między dwoma wektorami liczy się tak:

atan2(ax*by-ay*bx, ax*bx+ay*by)

Mogłem pochrzanić znaki.
http://www.cplusplus.com/reference/cmath/atan2/

1

Wg mnie wystarczy tak:

Rotation=Math.toDegrees(Math.atan2(Enemy_B.get(Target).GetY()-Y,Enemy_B.get(Target).GetX()-X));

1 użytkowników online, w tym zalogowanych: 0, gości: 1