Autor Beitrag
Teekeks
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Mi 24.08.11 21:42 
Hallo!

Ich habe ein Problem und komme nicht darauf was falsch sein soll.

Ich habe einen Spieler an den Koordinaten (Posx|Posy).
Dann habe ich den Cursor an den Koordinaten (PointX|PointY).

Nun möchte ich den Spieler zum Mauszeiger Rotieren. Dazu gibt es die Flieskommazahl rot vom Spieler, welche eine Angabe der Rotation in Grad sein soll.

Nach oben gedreht beträgt die Rotation ja genau 0°.

Also habe ich mir gedacht dass ich einfach 2 Vektoren Bilde (einen entlang dieser 0°-Linie mit (0|-1) und den anderen zwischen dem Spieler und dem Cursor) und dann einfach den Winkel zwischen den beiden Errechne.

Der entsprechende Java-Code sieht so aus:
ausblenden Quelltext
1:
    rot=Math.acos(((-1)*(PointY-Posy))/(Math.sqrt(Math.pow(PointX-Posx,2)+Math.pow(PointY-Posy,2))));					


Jedoch bekomme ich leider nicht das gewünschte Ergebnis. (rot ist 1.5 an Stellen wo es 45.0 sein sollte usw.).
Also muss ich ja was falsch gemacht haben.

Könnt ihr vl. den Fehler finden?

Gruß Teekeks
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 24.08.11 21:51 
Acos allein reicht wegen seines Wertebereichs von [0,pi] nicht aus, nimm Atan2. Vielleicht noch Grad und Radians verwechselt?
Finde es auch merkwürdig, dass du 0° oben ansetzt, das beißt sich doch mit allen trigonometrischen Funktionen :gruebel: .

_________________
>λ=
Teekeks Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Mi 24.08.11 22:10 
Die Graphik ist hat so rotiert.
Kann ich aber auch noch ändern wenn das günstiger sein sollte.

Aber atan2 benötigt 2 Parameter.
Wie muss ich die Nutzen? Aus der Englischen Hilfe bin ich nicht schlau geworden :(
Teekeks Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Mi 24.08.11 23:02 
Ahh, Wenn ich das jetzt richtig verstanden habe, müsste ich nur die 2 Koordinaten (PointX und PointY) angeben um den Winkel zwischen dem und der X-Achse zurück zu bekommen.

Jedoch gibt es da ja 2 Probleme: a) Auf welchen Punkt bezieht der sich dabei? und b) wenn ich das so mache wie ich mir das vorgestellt habe, (einfach nur die 2 Koordinaten angeben) bekomme ich nur Werte um die 0.irgendwas raus (muss ich das vl noch umrechnen?)

Edit: oh, sry. Doppelpost :(
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mi 24.08.11 23:51 
Die Funktion ist dazu gedacht, zu einem Koordinatenpaar den richtigen Winkel für Polarkoordinaten zurückzuliefern.

Wenn du nun bei den beiden Parametern deinen Vektor Spieler/Cursor einsetzt, bekommst du den Winkel des Vektors im mathematischen koordinatensystem. Den Winkel dann in dein KoSys umzurechnen überlasse ich erstmal dir.
Teekeks Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: Mi 24.08.11 23:57 
Haa, Jetzt hab ich es hingekommen.

Code:rot=Math.atan2(PointY-Posy,PointX-Posx)*(180/Math.PI);