drehsinn und arcus cosinus

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

drehsinn und arcus cosinus

Beitrag von Glocke » 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

Code: Alles auswählen

cos (a) = <u, v> / (|u| |v|)
Entsprechend wollte ich die acos-Funktion verwenden und den Winkel (der dann [0;360) sein sollte) auf meine Blickrichtungen (effektiv [0;8) ganzzahlig) abbilden.

Code: Alles auswählen

[0;360) -> [0;8)
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
Zuletzt geändert von Glocke am Di Mär 05, 2013 3:08 pm, insgesamt 2-mal geändert.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: nicht bijektiver arcus cosinus

Beitrag von cloidnerux » Di Mär 05, 2013 2:34 pm

Redundanz macht wiederholen unnötig.
quod erat expectandum

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: nicht bijektiver arcus cosinus

Beitrag von Glocke » Di Mär 05, 2013 2:40 pm

cloidnerux hat geschrieben:Hilft dir das:
http://www.wolframalpha.com/input/?i=Pl ... 2*Pi%7D%5D
Kannst du mir dazu noch nen Satz oder zwei sagen? :lol:

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: nicht bijektiver arcus cosinus

Beitrag von cloidnerux » Di Mär 05, 2013 2:51 pm

Der blaue Graph stellt den Cosinus dar und der Rot/violette den Arcuscosinus des entsprechenden Cosinus wertes. Damit wollte ich egt nur Zeigen, wie sich der Cosinus zum Arcuscosinus verhält. Und damit die Aussage, dass der Arcuscosinus niemals Bijektiv sein kann. Du musst selber anhand der Geometrie unterscheiden, ob du jetzt positive oder negative Winkel hast.
Du musst nun eine Gerade festlegen, anhand derer du überprüfst, ob eine Richtung rechts oder Links davon ist.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: nicht bijektiver arcus cosinus

Beitrag von Glocke » Di Mär 05, 2013 3:00 pm

cloidnerux hat geschrieben:Der blaue Graph stellt den Cosinus dar und der Rot/violette den Arcuscosinus des entsprechenden Cosinus wertes. Damit wollte ich egt nur Zeigen, wie sich der Cosinus zum Arcuscosinus verhält. Und damit die Aussage, dass der Arcuscosinus niemals Bijektiv sein kann. Du musst selber anhand der Geometrie unterscheiden, ob du jetzt positive oder negative Winkel hast.
Okay stimmt xDD Sau ey, ich sollte aufwachen :lol:
cloidnerux hat geschrieben:Du musst nun eine Gerade festlegen, anhand derer du überprüfst, ob eine Richtung rechts oder Links davon ist.
Hab auch schon überlegt, wie ich dem Programm die Drehrichtung klar mache. Wie meinst du das mit der Geraden genau?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: drehsinn und arcus cosinus

Beitrag von cloidnerux » Di Mär 05, 2013 3:15 pm

Wie meinst du das mit der Geraden genau?
Anschaulich.
Um den Drehsinn festzulegen brauchst du ein Referenzsystem, in diesem Fall kann man das durch eine Gerade darstellen, die durch den Mittelpunkt in Blickrichtung verläuft. Daher, der Geradenvektor entspricht der Blickrichtung. Die Gerade brauchst du in deinem Programm nicht, sollte aber helfen sich das ganze vorzustellen.

Mir fällt auch gerade ein, dass du auch mit dem Arcustangens arbeiten kannst. Du Referenzierst alle Punkte Relativ zum Mittelpunkt deiner Figur, bildest dann die beiden Vektoren, normierst diese und berechnest den Winkel Realtiv zum Koordinatensystem. Dann musst du nur die beiden Winkel subtrahieren. Ich glaube, mit der Funktion "atan2" kannst du dir das Normieren sparen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: drehsinn und arcus cosinus

Beitrag von Glocke » Di Mär 05, 2013 3:22 pm

/EDIT: Jetzt habe ich verstanden was du meinst :) So eine feste Gerade verwende ich effektiv schon; das ist einer der Winkel den ich bei der Berechnung verwende. Allerdings habe ich noch nicht ganz verstanden wie mir das hilft :cry:

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: drehsinn und arcus cosinus

Beitrag von Glocke » Di Mär 05, 2013 9:18 pm


Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: drehsinn und arcus cosinus

Beitrag von cloidnerux » Di Mär 05, 2013 9:25 pm

Darauf wollte ich hinaus^^
Redundanz macht wiederholen unnötig.
quod erat expectandum

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: drehsinn und arcus cosinus

Beitrag von Glocke » Mi Mär 06, 2013 9:07 am

im nachhinein macht das auch alles sinn xDD

lg ^^

Antworten