En mi pregunta anterior se me aconsejó que convirtiera lat/lon/altitude a coordenadas esféricas o cartesianas. No estoy trabajando cerca de los polos y sería seguro suponer una Tierra esférica. ¿Cuál sería la mejor manera de hacer esto con la mínima cantidad de operaciones? ¿Sería mejor usar x/y/z o phi/theta/rho? Estoy trabajando en un pequeño microcontrolador, sin FPU hardware (¡sólo FPU software!) así que cada ciclo cuenta.
Respuesta
¿Demasiados anuncios?Tenga en cuenta que "Lat/Lon/Alt" no es más que otro nombre para las coordenadas esféricas, y que phi/theta/rho no son más que otro nombre para la latitud, la longitud y la altitud. :) (Una pequeña diferencia: la altitud se suele medir desde la superficie de la esfera; rho se mide desde el centro -- para convertir, sólo hay que sumar/restar el radio de la esfera).
Convertir phi/theta/rho a cartesianas x/y/z donde (0,0,0) es el centro de la tierra y rho es la distancia desde el centro:
# python
x = math.cos(phi) * math.cos(theta) * rho
y = math.cos(phi) * math.sin(theta) * rho
z = math.sin(phi) * rho # z is 'up'
(Ten en cuenta que aquí hay algunas opciones ligeramente arbitrarias en lo que significa cada eje... puede que quieras que 'y' apunte al polo norte en lugar de a 'z', por ejemplo).
La inversa, y mucha más información, puede encontrarse en Wikipedia: http://en.wikipedia.org/wiki/Spherical_coordinate_system