У меня есть следующая информация:
Существует сфера с началом координат (0 , 0,0) и радиусом R. После пересечения лучевой сферы я знаю точку (XYZ) в трехмерном пространстве, которая находится на сфере (точное положение в трехмерном пространстве, где линия проходит через оболочку сферы).
Для моей программы я хотел бы вычислить широта и долгота точки XYZ на сфере, но я не могу придумать (или погуглить) способ сделать это легко.
Короче говоря, я пытаюсь написать такую функцию:
public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
return Latitude and Longitude
}
Кто-нибудь знает, как это сделать? В качестве справки этот файл Wiki SVG может быть полезен:
Обновление:
Спасибо за все полезные ответы, поэтому в конце я выбрал этот код:
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.