gpt4 book ai didi

c# - Vector3 的纬度和经度未在 3D 球体上对齐

转载 作者:行者123 更新时间:2023-12-03 03:43:05 25 4
gpt4 key购买 nike

我正在尝试将纬度和经度转换为 Vector3 格式。对于给定的纬度和经度,我想将其转换为 Vector3,其中标记对象将位于此 Vector3 位置。

这是我的代码:

void createLand()
{
double latitude_rad = (latitude) * Math.PI / 180;
double longitude_rad = (longitude) * Math.PI / 180;

double xPos = (radiusEarth * Math.Cos((latitude_rad)) * Math.Cos((longitude_rad)));
double yPos = (radiusEarth * Math.Cos((latitude_rad)) * Math.Sin((longitude_rad)));
double zPos = (radiusEarth * Math.Sin((latitude_rad)));

markerPos.x = (float)xPos;
markerPos.y = (float)yPos;
markerPos.z = (float)zPos;

ObjectMarker.position = markerPos;
}

我使用 6371 作为 radiusEarth,这是伦敦 lat:51.509865、lon:-0.118092 的输出:

Output for London Coordinates

这是北极的输出,纬度:90,经度:135:

Output for North Pole Coordinates

标记(即 Shiny 的小球体)位置错误。

我的转换有什么问题吗?或者有其他方法可以解决这个问题吗?

编辑...

我使用过的地球纹理可以在 here 找到,这是10K图像。我构建了球体并使用 Blender 应用了纹理 - 我对球体应用了旋转,以便前 View 将反射(reflect)纬度、经度的位置:0,0。

创建地球对象的代码:

void createEarth()
{
ObjectEarth.gameObject.transform.localScale = 1f * radiusEarth * Vector3.one;
}

编辑2...

这是使用 Unity 的预定义矢量时放置标记的位置:

void createLand()
{
ObjectMarker.position = radiusEarth * Vector3.forward;
}

enter image description here

void createLand()
{
ObjectMarker.position = radiusEarth * Vector3.right;
}

enter image description here

void createLand()
{
ObjectMarker.position = radiusEarth * Vector3.up;
}

enter image description here

最佳答案

您在转换为 3D 空间时使用了错误的轴。

  • Y 是上/下轴,因此它绝对应该是 sin(latitude) 轴。
  • 0,0 位于 z = 1*radiusEarth,因此 z 需要是带有 cos*cos 的那个。
  • 0,90 位于 x = -1 * radiusEarth 处,因此 x 需要为负 cos*sin。

总共:

void createLand()
{
double latitude_rad = latitude * Math.PI / 180;
double longitude_rad = longitude * Math.PI / 180;

double zPos = radiusEarth * Math.Cos(latitude_rad) * Math.Cos(longitude_rad);
double xPos = -radiusEarth * Math.Cos(latitude_rad) * Math.Sin(longitude_rad);
double yPos = radiusEarth * Math.Sin(latitude_rad);

markerPos.x = (float)xPos;
markerPos.y = (float)yPos;
markerPos.z = (float)zPos;

ObjectMarker.position = markerPos;
}

关于c# - Vector3 的纬度和经度未在 3D 球体上对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59706407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com