我得到以下信息:
存在一个原点为 (0,0,0)、半径为 R 的球体。
进行射线球体相交后,我知道 3D 空间中球体上的一个点 (XYZ)(直线穿过球体外壳的 3D 空间中的确切位置)。
对于我的程序,我想计算球体上 XYZ 点的纬度和经度,但我无法想出(或谷歌)轻松完成此操作的方法。
简而言之,我想要编写的函数是这样的:
public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
return Latitude and Longitude
}
有人知道怎么做这个吗?作为参考,此 Wiki SVG 文件可能会有所帮助:
Update:
感谢所有有用的答案,所以最后我使用了以下代码:
public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
float lat = (float)Math.Acos(position.Y / sphereRadius); //theta
float lon = (float)Math.Atan(position.X / position.Z); //phi
return new LatLon(lat, lon);
}
现在我必须考虑哪个答案最能帮助我接受:P。
我想从 x,y,z(3d 坐标系)找到球极坐标应该不难。
-
r
如果它在表面上,则总是恒定的。
-
(90 - θ)你的纬度(负数意味着它在底部)它是从顶部开始测量的.
-
φ是你的经度。 (但不太确定经度系统)
另请检查此图维基百科 http://en.wikipedia.org/wiki/Spherical_coordinate_system.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)