Winkelberechnung in C-Code
-
Hallo liebe Community,
eine kurze frage, wo ist der Fehler. Also kein Syntaktischer Fehler, sondern ein Logischer.if (xVec == 0 && yVec == 0) { } else if (xVec == 0 && yVec > 0) { tankWeaponAngle = -90.0f; } else if (xVec == 0 && yVec < 0) { tankWeaponAngle = 90.0f; } else if (yVec == 0 && xVec > 0) { tankWeaponAngle = 180.0f; } else if (yVec == 0 && xVec > 0) { tankWeaponAngle = 0.0f; } else if (xVec > 0 && yVec > 0 && xVec > yVec) { // Beide Positiv / X Größer tankWeaponAngle = atanf(tan(float(yVec) / float(xVec))) * 180 / 3.14159265 + 180.0f; } else if (xVec > 0 && yVec > 0 && xVec < yVec) { // Beide Positiv / Y Größer tankWeaponAngle = -90.0f - atanf(tan(float(xVec) / float(yVec))) * 180 / 3.14159265; } else if (xVec < 0 && yVec > 0 && -xVec > yVec) { // X < 0 / Y > 0 / X Größer tankWeaponAngle = -atanf(tan(float(yVec) / float(-xVec))) * 180 / 3.14159265; } else if (xVec < 0 && yVec > 0 && -xVec < yVec) { // X < 0 / Y > 0 / Y Größer tankWeaponAngle = -90.0f + atanf(tan(float(-xVec) / float(yVec))) * 180 / 3.14159265; } else if (xVec > 0 && yVec < 0 && xVec > -yVec) { // X > 0 / Y < 0 / X Größer tankWeaponAngle = 180.0f - atanf(tan(float(-yVec) / float(xVec))) * 180 / 3.14159265; } else if (xVec > 0 && yVec < 0 && xVec < -yVec) { // X > 0 / Y < 0 / Y Größer tankWeaponAngle = 90.0f + atanf(tan(float(xVec) / float(-yVec))) * 180 / 3.14159265; } else if (xVec < 0 && yVec < 0 && -xVec > -yVec) { // X < 0 / Y < 0 / X Größer tankWeaponAngle = atanf(tan(float(-yVec) / float(-xVec))) * 180 / 3.14159265; } else if (xVec < 0 && yVec < 0 && -xVec < -yVec) { // X < 0 / Y < 0 / Y Größer tankWeaponAngle = 90.0f - atanf(tan(float(-xVec) / float(-yVec))) * 180 / 3.14159265; }
Es geht zwar komplett rundum und die Winkel stimmen auch, jedoch hat es bei 45°, bei 135°, bei 225° und bei 315° immer einen Punkt, bei dem es einen kurzen sprung zurück macht.
-
1234567890 schrieb:
wo ist der Fehler.
1234567890 schrieb:
die Winkel stimmen auch, jedoch hat es bei 45°, bei 135°, bei 225° und bei 315° immer einen Punkt, bei dem es einen kurzen sprung zurück macht.
Du widersprichst dir selbst.
atanf(tan(...))
wtf.
Keine Ahnung, was du versuchst, zu berechnen. Falls es der Winkel zwischen x-Achse und einem (x,y)-Vektor sein soll:
angle = atan2( y, x );
-
Das kommt bei raus wenn man immer "Google Hilft" schreibt -.-
Kannte das atan2 nicht, und das war auch das Problem, jetzt läuft es ohne diese kurzen sprünge.Zur Info, bei bestimmten winkeln hat es einen sprung zurück gemacht, z.b. von 135° zurück auf 133° und von da an dann weiter, trotzdem ist es komplett rund rum gelaufen.
Danke für die Hilfe, auch wenn du mehr auf genervter Lehrer gemacht hast
-
1234567890 schrieb:
...auch wenn du mehr auf genervter Lehrer gemacht hast
Ziel erreicht. Im Alltag mag unscharfes Formulieren akzeptabel sein, in der Mathematik kommt es aber auf Präzision an. Es ist sinnlos zu antworten, wenn nicht klar ist, wie die Frage lautet.