У меня есть следующая информация:
Существует сфера с началом (0,0,0) и радиусом R.
После пересечения лучевой сферы я знаю точку (XYZ) в трехмерном пространстве, которая находится на сфере (точное положение в трехмерном пространстве, где линия проходит через корпус сферы).
Для моей программы я хотел бы рассчитать широту и долготу точки XYZ на сфере, но я не могу придумать (или Google) способ сделать это легко.
Короче говоря, функция, которую я пытаюсь написать, такова:
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.