drehsinn und arcus cosinus
Verfasst: Di Mär 05, 2013 2:22 pm
Hi, die acos-Funktion aus <cmath> scheint bijektiv zu sein, d.h. bildet auf das Intervall [0;pi] ab. http://en.cppreference.com/w/cpp/numeric/math/acos
Allerdings brauche ich eine nicht-bijektive (Nachtrag: is quatsch xD arcus-cosinus Funktion, die entsprechend auf [0;2pi) abbildet.
Hintergrund:
Ich arbeite gerade wieder an meinem Spiel: jeder Figur habe ich einen 2d-Vektor zugeordnet, der seine aktuelle Position beeinhaltet. Bewege ich eine Figur zu einem anderen Punkt (genauso ein 2d-Vektor) benötige ich die Blickrichtung, damit ich den entsprechenden Frame meines Sprites rendern kann. Ich verwende dabei 8 Blickrichtungen (45°-Abstände).
Der bisherige Ansatz ist es, den Richtungsvektor (Ziel - aktuelle Position) zu ermitteln und den Winkel zwischen diesem und der "Default-Richtung" zu ermitteln
Entsprechend wollte ich die acos-Funktion verwenden und den Winkel (der dann [0;360) sein sollte) auf meine Blickrichtungen (effektiv [0;8) ganzzahlig) abbilden.
Die Umrechnung des acos-Ergebnisses (Bogenmaß) in meinen Winkel (Gradmaß) ist kein Problem. Allerdings liefert die Funktion halt nur [0;180]. Hat jemand eine Idee für mich?
LG Glocke
/EDIT: Ich merke gerade, dass mein Ansatz zur Winkelberechnung schon nur den kleineren von beiden Winkeln liefert xD
Allerdings brauche ich eine nicht-bijektive (Nachtrag: is quatsch xD arcus-cosinus Funktion, die entsprechend auf [0;2pi) abbildet.
Hintergrund:
Ich arbeite gerade wieder an meinem Spiel: jeder Figur habe ich einen 2d-Vektor zugeordnet, der seine aktuelle Position beeinhaltet. Bewege ich eine Figur zu einem anderen Punkt (genauso ein 2d-Vektor) benötige ich die Blickrichtung, damit ich den entsprechenden Frame meines Sprites rendern kann. Ich verwende dabei 8 Blickrichtungen (45°-Abstände).
Der bisherige Ansatz ist es, den Richtungsvektor (Ziel - aktuelle Position) zu ermitteln und den Winkel zwischen diesem und der "Default-Richtung" zu ermitteln
Code: Alles auswählen
cos (a) = <u, v> / (|u| |v|)
Code: Alles auswählen
[0;360) -> [0;8)
LG Glocke
/EDIT: Ich merke gerade, dass mein Ansatz zur Winkelberechnung schon nur den kleineren von beiden Winkeln liefert xD