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