Трехмерные координаты на сфере по Широте и Долготе

У меня есть следующая информация:

Существует сфера с началом координат (0 , 0,0) и радиусом R. После пересечения лучевой сферы я знаю точку (XYZ) в трехмерном пространстве, которая находится на сфере (точное положение в трехмерном пространстве, где линия проходит через оболочку сферы).

Для моей программы я хотел бы вычислить широта и долгота точки XYZ на сфере, но я не могу придумать (или погуглить) способ сделать это легко.

Короче говоря, я пытаюсь написать такую ​​функцию:

public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
    return Latitude and Longitude
}

Кто-нибудь знает, как это сделать? В качестве справки этот файл Wiki SVG может быть полезен:

Geographic coordinates

Обновление:

Спасибо за все полезные ответы, поэтому в конце я выбрал этот код:

 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.

39
задан PKCLsoft 19 July 2018 в 08:08
поделиться