Ich habe versucht, die Koordinatenrahmen herauszufinden, die das Lunar Orbiter Laser Altimeter (LOLA) Team für Daten verwendet.
In ihrer Datei dsmap_polar.cat geben sie an:
Das Problem hier ist die Bedeutung ihres "Längengrades". Das Standardkugelsystem ist definiert:
Ich suche nach der Motivation und Erklärung, warum jemand den Längensinus für die x-Koordinate und den Kosinus für die y-Koordinate wählen würde, damit ich besser verstehen kann, was ich in meinen Transformationsgleichungen ändern muss.
Wenn man aus dem stereografischen Projektions-Breitengrad-Längengrad-System gemäß ihren Gleichungen umwandelt, endet man dann wirklich damit, dass die x-Achse in Richtung der mittleren Erde zeigt?
Was ich wirklich brauche, ist, den Fehler in meinen Umrechnungsformeln zu finden. Ich muss in der Lage sein, zwischen stereografischer LOLA-Projektion und gnomonischer Projektion umzuwandeln.
Gnomonisches bis kartesisches planetozentrisches System (C1):
Kartesische planetozentrische bis kartesische stereographische Projektion (C2):
Nun ist die inverse Transformation gegeben durch:
Stereographisches kartesisches System zum Breitengrad-Längengrad-System (bereitgestellt in der LOLA-Katalogdatei für die nördliche Hemisphäre) (C3):
Von Breitengrad und Längengrad zum gnomonischen kartesischen System (C4):
Von hier Breiten- und Längengrad bis kartesisch planetozentrisch wird mit obigem Standard umgerechnet.
Wenn ich nun die Ergebnisse der Transformation (C1) und (C3) vergleiche, die durch den obigen Standard in das kartesische System konvertiert wurden, sind die x- und y-Achsen vertauscht. Das Problem ist, ich bin mir nicht sicher, welche Transformation richtig ist. Was ich wirklich will, ist, die planetozentrischen Koordinaten mit der x-Achse als mittlere Erdrichtung zu erreichen.
Der folgende Code verwendet Matlab-Syntax. steht für den Bezugsradius der Mondkugel. Beginnen wir mit einem bestimmten Punkt in der gnomonischen Projektion:
a = 1737400;
x_g = -411141.107140;
y_g = -411325.894877;
Konvertieren Sie nun diesen Punkt von gnomonischen Koordinaten in kartesische planetozentrische Koordinaten, die unter Verwendung der obigen Standard-Kugelkoordinaten abgeleitet werden:
x = x_g/sqrt( 1 + (x_g/a)^2 + (y_g/a)^2 );
y = y_g/sqrt( 1 + (x_g/a)^2 + (y_g/a)^2 );
z = a/sqrt( 1 + (x_g/a)^2 + (y_g/a)^2 );
Das gibt:
(x,y,z) = (-389878.216487,-390053.447599,1647547.281362)
Ich konvertiere weiterhin mit (beachten Sie die Austausche) in die stereografische Projektion Und im Zähler auf der rechten Seite, was einen zum System des LOLA-Teams bringen sollte - hoffentlich):
x_s = 2*a*y/(a + z);
y_s = 2*a*x/(a + z);
was ergibt:
(x_s,y_s) = (-400407.334903,-400227.452318)
Um die Konsistenz zu überprüfen, führe ich die inverse Transformation durch, um sicherzustellen, dass ich im gnomonischen System denselben Punkt erhalte. Ich nehme diesen (x_s,y_s)-Punkt als Ausgangspunkt und konvertiere ihn mithilfe der offiziellen Formeln des LOLA-Teams aus der obigen Katalogdatei wieder in das Breiten-, Längengradsystem:
r = sqrt(x_s^2 + y_s^2);
lon = atan2d(y_s,x_s);
lat = 90 - 2*atand(0.5*r/a);
und das ergibt:
(lat,lon) = (71.492702,-135.012873)
Konvertieren Sie nun in das kartesische System mit:
theta = 90-lat;
phi = lon;
x = a*sind(theta)*cosd(phi);
y = a*sind(theta)*sind(phi);
z = a*cosd(theta);
ergibt:
(x,y,z) = (-390053.447599,-389878.216487,1647547.281362)
Sie können jetzt sehen, dass im Vergleich zu dem vorherigen Ergebnis, das ich beim Konvertieren von der Gnomonic erhalten habe, hier bereits die x- und y-Achsen vertauscht sind. Ich fahre also nicht mit den endgültigen Transformationen zum gnomonischen System fort. Beachten Sie auch, dass dies ein bestimmter Punkt ist, daher bin ich mir nicht sicher, ob ich im Allgemeinen nur ausgetauscht werde Und Achsen oder für andere Punkte ergeben sich andere Probleme wie unterschiedliche Vorzeichen.
Ich habe versucht, dasselbe mit Python zu tun:
import numpy as np
a = 1737400
x_g = -411141.107140
y_g = -411325.894877
x = x_g/np.sqrt( 1 + np.square(x_g/a) + np.square(y_g/a) )
y = y_g/np.sqrt( 1 + np.square(x_g/a) + np.square(y_g/a) )
z = a/np.sqrt( 1 + np.square(x_g/a) + np.square(y_g/a) )
print('(x, y, z) = ', (x, y, z))
x_s = 2*a*y/(a + z)
y_s = 2*a*x/(a + z)
print('(x_s, y_s) = ', (x_s, y_s))
r = np.sqrt(np.square(x_s) + np.square(y_s));
lon = np.arctan2(y_s,x_s);
lat = np.deg2rad(90.0) - 2.0*np.arctan(0.5*r/a);
print('(lat, lon) = ', (lat, lon))
x_d = a * np.tan(np.deg2rad(90.0)-lat) * np.sin(lon)
y_d = a * np.tan(np.deg2rad(90.0)-lat) * np.cos(lon)
print('(x_d, y_d) = ', (x_d, y_d))
Ergebnis :
(x, y, z) = (-389878.2164872003, -390053.4475990476, 1647547.281362467)
(x_s, y_s) = (-400407.3349029025, -400227.4523177882)
(lat, lon) = (1.247783033129123, -2.356419165143969)
(x_d, y_d) = (-411141.10714000027, -411325.8948770001)
Vergleichen Sie Ihre obigen Gleichungen mit:
X = R SIN( LONPI/180)
Y = R COS(LONPI /180)
Sie haben cos für x und sin für y verwendet, aber in LOLA wird sin für x und cos für y verwendet.
x- und y-Werte werden jetzt nicht vertauscht und
x_g = -411141,107140
y_g = -411325,894877
(x_d, y_d) = (-411141,10714000027, -411325,8948770001)
sind jetzt gleich.
Also ich glaube den Fehler endlich gefunden zu haben. Ich habe einige zusätzliche Fehler gemacht, als ich nach Ihrem Fehler gesucht habe. Hoffentlich sind keine Fehler mehr in meiner Antwort.
sind
et al (dessen Argument ist in Grad, nicht in Radiant) und ich glaube, mein Code verwendet konsequent Funktionen, die Grade akzeptieren. Wenn Sie sich Ihre Ergebnisse ansehen (x,y,z)
, haben sie auch die x- und y-Koordinaten vertauscht. Ich bin mir ziemlich sicher, das ist nicht das Problem. Ich glaube, das Problem ist wirklich diese ungewöhnliche Wahl, wo gemessen werden soll
oder Azimutwinkel.
äh
Uwe
Atapaka