Kartetisch -> Polarkoordinaten

Status
Nicht offen für weitere Antworten.

Surma

Bekanntes Mitglied
Ich muss kartetische Koordinaten in Polarkoordinaten umrechnen.
Nun ist es ja nicht so, das es nicht zu hauf Formeln im Netz gaebe,
aber da ist ein Problem:

Sie benutzen meist folgende Formel:
alpha = arctan (y/x) ;

Dann hab ich zwar einen Winkel, aber er ist nie einen, der im richtigen Quadranten liegt.
Also meist ist der Winkel irgendwie "reproduzierbar", aber beim Punkt (2;-3) erhalt ich als Winkel -33°

Nun mussi ch noch irgendwie einen Fallunterschied fuer Quadranten in den SPeicher einbauen, was ich aber nicht gebacken krieg.

Hat das jemand bereits?

MfG
Crock
 
B

Beni

Gast
Es heisst kartesisch! 8)

Und ja, den arctan füttert man ja nur mit einem Verhältnis, da gehen Informationen verloren.

Ich hab da vor Jahren mal was geschreiben (aber nie getestet...):
Code:
  public static double atan2 ( double x, double y ){
    if ( Double.isNaN( x ) || Double.isNaN( y ) )
      return Double.NaN;

    if ( x == Double.POSITIVE_INFINITY ) return 0;
    if ( x == Double.NEGATIVE_INFINITY ) return Math.PI;

    if ( y == Double.POSITIVE_INFINITY ) return Math.PI / 2.0;
    if ( y == Double.NEGATIVE_INFINITY ) return Math.PI * 3.0 / 2.0;

    if ( x == 0 && y == 0 )
      return 0;

    if ( x == 0 && y > 0)
      return 0.5 * Math.PI;

    if ( x == 0 && y < 0)
      return 3 / 2 * Math.PI;

    if ( y == 0 && x > 0 )
      return 0;

    if ( y == 0 && x < 0 )
      return Math.PI;

        double xb = x < 0 ? -x : x;
        double yb = y < 0 ? -y : y;

    double arc = Math.atan( yb / xb );

    if ( x < 0 && y > 0 ){
      arc = -arc + Math.PI;
    }

    else if ( x < 0 && y < 0 ){
      arc += Math.PI;
    }

    else if ( x > 0 && y < 0 ){
      arc = -arc + 2 * Math.PI;
    }

    return arc;
  }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben