# Kartetisch -> Polarkoordinaten



## Surma (20. Aug 2004)

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


----------



## Beni (20. Aug 2004)

Es heisst karte*s*isch! 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...):

```
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;
  }
```


----------

