Vorerst: Hier geht es nicht um C++ an sich, sondern um die Realisierung in C++. Sorry, ich wusste einfach nicht, wo genau ich das unterbringen sollte.
Ich möchte meine eigene point_direction Funktion schreiben, die ich dann in mein Spiel (C++) implementieren möchte. Das Problem dabei ist, dass ich das nicht so ganz hinbekomme. Irgendwie (glaube ich) komme ich mit dem Winkel- oder Bogenmaß durcheinander. Ich hatte das Thema an sich noch nicht allzu lange in der Schule, deswegen kann da irgendwo ein Fehler sein. Ich habe es am Taschenrechner an 3 Proben erfolgreich berechnet, nur am PC klappt das irgendwie nicht so wie in der Theorie. Hier ist mein Ansatz:
Die Skizze (im Anhang).
1.) Es werden die Katheten ermittelt: dx = a, dy = b
2.) Es wird die Hypotenuse ausgerechnet: c
3.) Es wird mithilfe des Sinussatzes der Winkel Beta ausgerechnet: Beta
Alles anzeigen
Ergebnis:
Die Ergebnisse sind total verdreht; von -90° zu 0 und dann weiter von 90° zu 180° - Werte, mit denen ich nicht arbeiten kann.
Folglich bin ich zu folgender Lösung gekommen, die ich in einem Buch gefunden habe:
Also habe ich dies angewandt, musste jedoch immer noch durch die + bzw. - 90 nachhelfen.
Nun frage ich mich: Wieso muss ich hier mit Arcustangens und nicht mit Arcussinus arbeiten? Und warum muss ich extra noch 90 drauf addieren oder subtrahieren?
Ich möchte meine eigene point_direction Funktion schreiben, die ich dann in mein Spiel (C++) implementieren möchte. Das Problem dabei ist, dass ich das nicht so ganz hinbekomme. Irgendwie (glaube ich) komme ich mit dem Winkel- oder Bogenmaß durcheinander. Ich hatte das Thema an sich noch nicht allzu lange in der Schule, deswegen kann da irgendwo ein Fehler sein. Ich habe es am Taschenrechner an 3 Proben erfolgreich berechnet, nur am PC klappt das irgendwie nicht so wie in der Theorie. Hier ist mein Ansatz:
Die Skizze (im Anhang).
1.) Es werden die Katheten ermittelt: dx = a, dy = b
2.) Es wird die Hypotenuse ausgerechnet: c
3.) Es wird mithilfe des Sinussatzes der Winkel Beta ausgerechnet: Beta
Quellcode
- #define PI 3.14159265
- inline double DegToRad(double DegX) { return DegX*PI/180; }
- inline double RadToDeg(double ArcX) { return 180*ArcX/PI; }
- //Die Katheten & Hypotenuse berechnen
- double a = Game.MouseX-m_X;
- double b = Game.MouseY-m_Y;
- double c = sqrt(a*a+b*b);
- if(c==0) c=1; //Division durch 0 verhindern
- //Beta berechnen
- double Beta = RadToDeg(asin(b/c));
Ergebnis:
Die Ergebnisse sind total verdreht; von -90° zu 0 und dann weiter von 90° zu 180° - Werte, mit denen ich nicht arbeiten kann.
Folglich bin ich zu folgender Lösung gekommen, die ich in einem Buch gefunden habe:
Falls x > 0 : a = arctan(y/x)
Falls x < 0 : a = pi+arctan(y/x)
Falls x = 0 und y > 0 : a = pi/2;
Falls x = 0 und y < 0 : a = -pi/2;
Also habe ich dies angewandt, musste jedoch immer noch durch die + bzw. - 90 nachhelfen.
Nun frage ich mich: Wieso muss ich hier mit Arcustangens und nicht mit Arcussinus arbeiten? Und warum muss ich extra noch 90 drauf addieren oder subtrahieren?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Critical ()