Guten Mittag,
ich bin gerade an einem ziemlich verzwickten Problem:
ich möchte den Winkel zwischen 2 Punkten und der X-Achse angeben. Der Winkel soll mit dem Uhrzeigersinn verlaufen.
Hier sind 3 Beispiele was für Winkel die Funktion eigentlich liefern sollte :
gelöst habe ich (bisher das so):
Ein paar Hinweise noch:
über this.getX() und this.getY() bekommt man X und Y von P1.
genauso ist in otherP P2 drin.
Ich programmiere alles in Greenfoot (eine vereinfachte Entwicklungsumgebung für java) - das sollte hier aber kein Unterschied machen.
Jetzt zum Problem:
Die Funktion liefert mir für jeden Fall (außer 0,90,180,270) eindeutig falsche Werte. Sie liefert mir sogar meist einfach nur 180,0 oder 90,0 aus obwohl sich otherP immer verändert.
Ich bin jetzt schon 2 Tage an dieser Funktion - nach meinem besten Wissen müsste sie eigentlich funktionieren. Deshalb hoffe ich jetzt dass jemand der klüger ist als ich
vielleicht sehen kann wo das Problem liegt.
Mit freundlichen Grüßen an jeden der sich das bis hier durchgelesen hat
Mike
ich bin gerade an einem ziemlich verzwickten Problem:
ich möchte den Winkel zwischen 2 Punkten und der X-Achse angeben. Der Winkel soll mit dem Uhrzeigersinn verlaufen.
Hier sind 3 Beispiele was für Winkel die Funktion eigentlich liefern sollte :

gelöst habe ich (bisher das so):
Java:
/**
* berechnet den Winkel zweier Punkte relativ zur X-Achse im Gradmaß
*
* @param otherP Den 2. Punkt der Winkelberechnung
* @return Der Winkel der 2 Punkte
*/
public int getAngle(TPos otherP)
{
int dx = otherP.getX() - this.getX();
int dy = otherP.getY() - this.getY();
int adx = Math.abs(dx);
int ady = Math.abs(dy);
if (dy == 0 && dx == 0)
{
return 0;
}
else if (dy == 0 && dx > 0)
{
return 0;
}
else if (dy == 0 && dx < 0)
{
return 180;
}
else if (dy > 0 && dx == 0)
{
return 270;
}
else if (dy < 0 && dx == 0)
{
return 90;
}
double rwinkel = Math.atan(ady /adx);
double dWinkel = 0;
if (dx>0 && dy>0) // 1. Quartal Winkkel von 270° - 359°
{
dWinkel = 360 - Math.toDegrees(rwinkel);
}
else if (dx<0 && dy>0) // 2. Quartal Winkkel von 180° - 269°
{
dWinkel = 180 + Math.toDegrees(rwinkel);
}
else if (dx>0 && dy<0) // 3. Quartal Winkkel von 90° - 179°
{
dWinkel = 180 - Math.toDegrees(rwinkel);
}
else if (dx<0 && dy<0) // 4. Quartal Winkkel von 0° - 89°
{
dWinkel = Math.toDegrees(rwinkel);
}
int iWinkel = (int)dWinkel;
if (iWinkel == 360)
{
iWinkel = 0;
}
// System.out.println("["+getX()+"|"+getY()+"]-["+otherP.getX()+"|"+otherP.getY()+"] "+dWinkel+"°");
return iWinkel;
}
Ein paar Hinweise noch:
über this.getX() und this.getY() bekommt man X und Y von P1.
genauso ist in otherP P2 drin.
Ich programmiere alles in Greenfoot (eine vereinfachte Entwicklungsumgebung für java) - das sollte hier aber kein Unterschied machen.
Jetzt zum Problem:
Die Funktion liefert mir für jeden Fall (außer 0,90,180,270) eindeutig falsche Werte. Sie liefert mir sogar meist einfach nur 180,0 oder 90,0 aus obwohl sich otherP immer verändert.
Ich bin jetzt schon 2 Tage an dieser Funktion - nach meinem besten Wissen müsste sie eigentlich funktionieren. Deshalb hoffe ich jetzt dass jemand der klüger ist als ich
Mit freundlichen Grüßen an jeden der sich das bis hier durchgelesen hat
Mike