2012-10-04 52 views
7

Tengo un conjunto de 2d puntos de cuadrícula (x, y) que quiero mapear/proyectar en una esfera como 3d puntos (x, y, z).cómo el mapa 2d puntos de cuadrícula (x, y) sobre la esfera como puntos 3d (x, y, z)

Me doy cuenta de que habrá cierta deformación hacia los polos a medida que aumenta el abs (y), pero mi parche de rejilla solo cubrirá una parte de la esfera cerca del ecuador, por lo que se evitará una deformación grave.

Tengo problemas para encontrar las ecuaciones adecuadas para eso.

+0

No estoy seguro de lo que está preguntando aquí ... ¿Qué representan los '' x' y 'y' en 2D? ¿Son latitud/longitud o coordenadas en alguna proyección rectangular plana de la esfera? En el último caso, ¿qué proyección estás usando? –

Respuesta

16

Parafraseado del artículo de Wikipedia sobre proyección de Mercator:

Given a "mapping sphere" of radius R, 
the Mercator projection (x,y) of a given latitude and longitude is: 
    x = R * longitude 
    y = R * log(tan((latitude + pi/2)/2)) 

and the inverse mapping of a given map location (x,y) is: 
    longitude = x/R 
    latitude = 2 * atan(exp(y/R)) - pi/2 

Para obtener las coordenadas 3D a partir del resultado de la aplicación inversa:

Given longitude and latitude on a sphere of radius S, 
the 3D coordinates P = (P.x, P.y, P.z) are: 
    P.x = S * cos(latitude) * cos(longitude) 
    P.y = S * cos(latitude) * sin(longitude) 
    P.z = S * sin(latitude) 

(Tenga en cuenta que la "hoja de radio "y el" radio 3D "casi seguro tendrá diferentes valores, así que he usado diferentes nombres de variable.)

+0

Mi latitud es 29.65163. Cuando trato de calcular el valor y, obtengo un error (en Python) porque 'tan ((latitud + pi/2)/2)' es -0.0970531183, y al iniciar sesión ese valor arroja un "error de dominio matemático" "ya que el valor es negativo. ¿Qué estoy haciendo mal? – Pikamander2

+0

Necesita convertir su latitud de grados a radianes, antes de agregar 'pi/2'. Esto convertirá el rango '+/- 90 grados' en un rango de' +/- pi/2 radianes', que no desbordará el rango de funciones a menos que esté en los polos (en cuyo caso la proyección de Mercator es singular de todos modos. ..) – comingstorm

1

Esperaría que pudiera usar la inversa de cualquiera de una serie de proyecciones globales.

Mercator es bastante bueno en todo el ecuador en comparación con otras proyecciones.

Las fórmulas están en la página wiki.
http://en.wikipedia.org/wiki/Mercator_projection

+0

gracias. me doy cuenta de que eso es lo que quiero, pero estoy teniendo problemas derivando las ecuaciones para tomar 2d puntos (x, y) a puntos 3d (x, y, z) en la esfera. – milkplus

+0

Ah, las fórmulas reales. Esta es una operación matemática no trivial, y es posible que tengas mejor suerte en http://math.stackexchange.com/. Una vez que obtenga la fórmula, puede volver aquí para obtener ayuda para programarla. Además, http://wiki.openstreetmap.org/wiki/Mercator – kreativitea

Cuestiones relacionadas