我有一组2d网格点(x,y),我想将其作为3d点(x,y,z)映射/投影到球体上。
我意识到随着abs(y)的增加会对极点产生一些扭曲,但我的网格补丁只能覆盖赤道附近的一部分球体,因此可以避免严重的翘曲。
我找不到合适的方程式。
答案 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。
那里:
phi = 90度 - 纬度
theta =经度
rho =你球体的半径。
答案 2 :(得分:1)
我希望您可以使用多个全球投影中的任何一个的倒数。
与其他预测相比,墨卡托在赤道附近相当不错。