www.jpct.net

General => German corner => Topic started by: mxtra on October 14, 2013, 06:57:52 pm

Title: Sphärische in Kartesische Koordinaten umwandeln
Post by: mxtra on October 14, 2013, 06:57:52 pm
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:

   
Code: [Select]
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.
Title: Re: Sphärische in Kartesische Koordinaten umwandeln
Post by: EgonOlsen on October 14, 2013, 08:14:52 pm
Einfach y und z negieren?
Title: Re: Sphärische in Kartesische Koordinaten umwandeln
Post by: mxtra on October 14, 2013, 08:30:20 pm
Danke, die geographische Länge wird tatsächlich korrekt übernommen, dafür wird aber die Breite ignoriert

Code: [Select]
SimpleVector vector = SunCalc.geoToCart(0,180,  18);
bringt ein richtiges Resultat,
Code: [Select]
SimpleVector vector = SunCalc.geoToCart(50,180,  18);bringt allerdings das selbe Resultat.
Title: Re: Sphärische in Kartesische Koordinaten umwandeln
Post by: EgonOlsen on October 14, 2013, 08:43:50 pm
Aber das liegt doch dann an deiner Umrechung an sich und nicht am Koordinatensystem... ???
Title: Re: Sphärische in Kartesische Koordinaten umwandeln
Post by: mxtra on October 14, 2013, 10:01:07 pm
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:
Code: [Select]
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;
}