how map 2d grid points (x,y) onto sphere as 3d points (x,y,z)
-
05-07-2021 - |
Вопрос
I have a set of 2d grid points (x,y) that I want to map/project onto a sphere as 3d points (x,y,z).
I realize there will be some warping towards the poles as abs(y) increases but my grid patch will only cover a portion of the sphere near the equator so severe warping will be avoided.
I'm having trouble finding the right equations for that.
Решение
Paraphrased from the wikipedia article on Mercator projection:
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
To get the 3D coordinates from the result of the inverse mapping:
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)
(Note that the "map radius" and the "3D radius" will almost certainly have different values, so I have used different variable names.)
Другие советы
I suppose that your (x,y) on the sphere are latitude, longitude.
If so, see http://tutorial.math.lamar.edu/Classes/CalcII/SphericalCoords.aspx.
There:
phi = 90 degree - latitude
theta = longitude
rho = radius of your sphere.
I would expect that you could use the inverse of any of a number of globe projections.
Mercator is pretty good around the equator compared to other projections.
Formulas are on the wiki page.
http://en.wikipedia.org/wiki/Mercator_projection