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

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

我在寻找合适的方程式时遇到了麻烦。

最佳答案

维基百科有关墨卡托投影的文章的释义是:

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)

(请注意,“ map 半径”和“3D半径”几乎可以肯定具有不同的值,因此我使用了不同的变量名。)

关于math - 如何将2d网格点(x,y)作为3d点(x,y,z)映射到球体上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12732590/

10-10 19:01