如何将2d网格点(x,y)映射到球体上作为3d点(x,y,z)

时间:2012-10-04 17:31:23

标签: math 3d geometry map-projections

我有一组2d网格点(x,y),我想将其作为3d点(x,y,z)映射/投影到球体上。

我意识到随着abs(y)的增加会对极点产生一些扭曲,但我的网格补丁只能覆盖赤道附近的一部分球体,因此可以避免严重的翘曲。

我找不到合适的方程式。

3 个答案:

答案 0 :(得分:19)

从维基百科有关墨卡托投影的文章中解释:

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

从逆映射的结果中获取3D坐标:

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)

(请注意,“地图半径”和“3D半径”几乎肯定会有不同的值,所以我使用了不同的变量名。)

答案 1 :(得分:2)

我认为球体上的(x,y)是纬度,经度。

如果有,请参阅http://tutorial.math.lamar.edu/Classes/CalcII/SphericalCoords.aspx

enter image description here

那里:

phi = 90度 - 纬度

theta =经度

rho =你球体的半径。

答案 2 :(得分:1)

我希望您可以使用多个全球投影中的任何一个的倒数。

与其他预测相比,墨卡托在赤道附近相当不错。

公式位于维基页面上 http://en.wikipedia.org/wiki/Mercator_projection