我有一组想要将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/