【问题标题】:Is it accurate to convert latitude and longitude into 3d coordinate on sphere?将纬度和经度转换为球体上的 3d 坐标是否准确?
【发布时间】: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


【解决方案1】:

由于网格数和纹理 UV 设置,它不准确。 如果您增加网格数并使纹理的 UV 正确生成的对象将位于正确的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2010-10-11
    相关资源
    最近更新 更多