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 = ?
matematyki w szkole nie miałeś? Nie wiesz co to sinus/cosinus?
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
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.
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;
nie chodzi Ci o coś takiego?
http://www.gamefromscratch.com/post/2012/11/18/GameDev-math-recipes-Rotating-to-face-a-point.aspx
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/
Wg mnie wystarczy tak:
Rotation=Math.toDegrees(Math.atan2(Enemy_B.get(Target).GetY()-Y,Enemy_B.get(Target).GetX()-X));