【发布时间】:2020-03-13 13:43:45
【问题描述】:
在 Unity3d 中, 我创建了一个球体,并使用地球纹理对其进行纹理化。
我将纬度和经度转换为 3d 坐标 我在那个位置生成了一个立方体。 立方体在球体上,但不准确。 (例如,当我为伦敦输入“51.504815,-0.128506”时,立方体在法国某处生成(44.854302,-0.595576))
我知道地球不是球体而是椭球体,这会影响结果吗? 我应该怎么做才能获得准确的转换结果以在正确的位置生成立方体?
下面是我使用的转换函数,我在网上使用了另一个函数,但它返回了相同的结果。
private Vector3 GetSphericalCoordinates(double latitude, double longitude)
{
latitude = latitude * Math.PI / 180D;
longitude = longitude * Math.PI / 180D;
double x = radius * Math.Cos(latitude) * Math.Sin(longitude);
double y = radius * Math.Sin(latitude);
double z = -radius * Math.Cos(latitude) * Math.Cos(longitude);
return new Vector3((float)x, (float)y, (float)z);
}
而纬度、经度 (0, 0), (90, 0) (0, 90)... 正好在象限上。所以我想知道为什么其他 lat、lng 值不正确...
提前致谢。
【问题讨论】:
-
如何从立方体的笛卡尔坐标转换回经纬度?
x的纵向因子应该是Math.Cos(longitude),反之亦然z。椭球校正本身不应该导致这么大的差异——7度~750公里,远大于difference in radii at the poles and equator。 -
了解您正在使用的
radius会有所帮助。 -
@LuisTavares 我的球体大小是 1。所以半径是 0.5
标签: unity3d math coordinates latitude-longitude