He estado tratando de averiguar los marcos de coordenadas que utiliza el equipo Lunar Orbiter Laser Altimeter (LOLA) para los datos.
En su archivo dsmap_polar.cat afirman:
El problema aquí es el significado de su "longitud". El sistema esférico estándar se define:
Estoy buscando la motivación y la explicación de por qué alguien elegiría el seno de longitud para la coordenada x y el coseno para la coordenada y para poder comprender mejor lo que tengo que cambiar en mis ecuaciones de transformación.
Además, si uno se transforma del sistema de longitud de latitud de proyección estereográfica según sus ecuaciones, ¿realmente termina con el eje x apuntando a la dirección media de la Tierra?
Lo que realmente necesito es encontrar el error en mis fórmulas de conversión. Necesito poder convertir entre la proyección estereográfica LOLA y la proyección gnomónica.
Sistema planetocéntrico gnomónico a cartesiano (C1):
Planetocéntrica cartesiana a proyección estereográfica cartesiana (C2):
Ahora las transformaciones inversas vienen dadas por:
Sistema cartesiano estereográfico a sistema de latitud longitud (proporcionado en el archivo de catálogo LOLA para el hemisferio norte) (C3):
De latitud y logitud al sistema cartesiano gnomónico (C4):
A partir de aquí, latitud y longitud hasta planetocéntrica cartesiana. se convierte utilizando el estándar anterior.
Ahora, si comparo los resultados de la transformación (C1) y (C3) convertidos al sistema cartesiano por el estándar anterior, los ejes x e y se intercambian. El problema es que no estoy seguro de qué transformación es correcta. Lo que realmente quiero es poder llegar a las coordenadas planetocéntricas con el eje x como dirección media de la Tierra.
El siguiente código utiliza la sintaxis de Matlab. representa el radio de referencia de la esfera lunar. Comencemos con algún punto específico en la proyección gnomónica:
a = 1737400;
x_g = -411141.107140;
y_g = -411325.894877;
Ahora, convierta este punto de coordenadas gnomónicas a planetocéntricas cartesianas, que se obtiene utilizando las coordenadas esféricas estándar anteriores:
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 );
Esto da:
(x,y,z) = (-389878.216487,-390053.447599,1647547.281362)
Continúo convirtiendo a la proyección estereográfica usando (tenga en cuenta los intercambios y en el numerador en el lado derecho que debería traer uno al sistema del equipo LOLA - con suerte):
x_s = 2*a*y/(a + z);
y_s = 2*a*x/(a + z);
lo que da:
(x_s,y_s) = (-400407.334903,-400227.452318)
Para verificar la consistencia, realizo la transformación inversa para asegurarme de obtener el mismo punto en el sistema gnomónico. Tomando este punto (x_s,y_s) como punto de partida, lo convierto de nuevo al sistema de latitud, longitud utilizando fórmulas oficiales del equipo de LOLA del archivo de catálogo anterior:
r = sqrt(x_s^2 + y_s^2);
lon = atan2d(y_s,x_s);
lat = 90 - 2*atand(0.5*r/a);
y esto resulta:
(lat,lon) = (71.492702,-135.012873)
Ahora, convirtiendo al sistema cartesiano usando:
theta = 90-lat;
phi = lon;
x = a*sind(theta)*cosd(phi);
y = a*sind(theta)*sind(phi);
z = a*cosd(theta);
resultados en:
(x,y,z) = (-390053.447599,-389878.216487,1647547.281362)
Ahora puede ver que, en comparación con el resultado anterior que obtuve al convertir desde el gnomónico, aquí los ejes x e y ya están intercambiados aquí. Así que no sigo con las transformaciones finales al sistema gnomónico. También tenga en cuenta que este es un punto específico, por lo que no estoy seguro, si en general, solo me intercambian y ejes o para otros puntos, surgen otras cuestiones como signos diferentes.
Intenté hacer lo mismo usando python:
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))
resultado :
(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)
Compare sus ecuaciones anteriores con:
X = R SEN(LON PI/180)
Y = R COS(LON PI/180)
Usaste cos para x y sen para y, pero en LOLA se usa sin para x y cos para y.
los valores x e y no se cambian ahora y
x_g = -411141.107140
y_g = -411325.894877
(x_d, y_d) = (-411141.10714000027, -411325.8948770001)
son iguales ahora.
Así que creo que finalmente encontré el error. Cometí algunos errores adicionales cuando busqué tu error. Espero que no haya más errores en mi respuesta.
sind
et al (cuyo argumento está en grados, no en radianes) y creo que mi código usa constantemente funciones que aceptan grados. Si observa sus (x,y,z)
resultados, también han cambiado las coordenadas x e y. Estoy bastante seguro de que este no es el problema. Creo que el problema es realmente esa elección inusual de dónde medir
o ángulo acimutal.
UH oh
uwe
atapaka