Sphärische in Kartesische Koordinaten umwandeln

Started by mxtra, October 14, 2013, 06:57:52 PM

Previous topic - Next topic

mxtra

Ich komme irgendwie mit dem Koordinatensystem nicht ganz klar. Ich möchte geografische Koordinaten in die entsprechenden kartesischen Koordinaten umwandeln. Dafür habe ich folgenden Code geschrieben:

    public static SimpleVector geoToCart(double lat, double lon,double R)
{

                lat = lat*0.01745329251;
lon = lon*0.01745329251;

float x = (float) (R * Math.sin(lon) * Math.cos(lat));
float y = (float) (R * Math.sin(lon) * Math.sin(lat));
float z = (float) (R * Math.cos(lon));

SimpleVector ret = new SimpleVector();
ret.x = x;
ret.y = y;
ret.z = z;
return ret;
}


Aufgrund der unterschiedlichen Koordinatensysteme (?) klappt das natürlich nich nicht, aber leider kriege ich das nicht angepasst.

EgonOlsen


mxtra

Danke, die geographische Länge wird tatsächlich korrekt übernommen, dafür wird aber die Breite ignoriert

SimpleVector vector = SunCalc.geoToCart(0,180,  18);
bringt ein richtiges Resultat,
SimpleVector vector = SunCalc.geoToCart(50,180,  18);
bringt allerdings das selbe Resultat.

EgonOlsen

Aber das liegt doch dann an deiner Umrechung an sich und nicht am Koordinatensystem... ???

mxtra

#4
Aber das Code-Snippet hat ja mal funktioniert. (Für ein anderes Projekt, aber gleicher Anspruch) Ich verstehe nicht warum das jetzt nicht mehr geht.

Ich denke fast, dass um die z-Achse gedreht wird, was natürlich nicht sichtbar wäre. Allerdings habe ich keine "Vertauschung" gefunden, die funktioniert.


Hiermit geht es:
public static SimpleVector geoToCart(double latitude, double longitude,double r)
{


latitude  =  latitude *0.01745329251f;
                longitude =  longitude*0.01745329251f;

float x = (float) (r * Math.cos(latitude) * Math.cos(longitude));
float y = (float) (r * Math.cos(latitude) * Math.sin(longitude));
float z = (float) (r * Math.sin(latitude));

SimpleVector ret = new SimpleVector();
ret.x =  y;
ret.y = -z;
ret.z = -x;

return ret;
}