Tengo la siguiente información:coordenadas 3D en una esfera de latitud y longitud
Existe una esfera con origen (0,0,0) y el radio R. Después de hacer una intersección de rayos-esfera I conocer un punto (XYZ) en el espacio 3D que está en la esfera (la posición exacta en el espacio 3D donde la línea atraviesa el casco de la esfera).
Para mi programa me gustaría calcular la Latitud y la Longitud del punto XYZ en la esfera, pero no puedo pensar (o Google) en una manera de hacerlo fácilmente.
Así que en resumen, la función que estoy tratando de escribir es la siguiente:
public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
return Latitude and Longitude
}
¿Alguien sabe cómo hacer esto? Como referencia este archivo Wiki SVG podría ser útil:
También me pareció que para convertir de nuevo desde la latitud y longitud para XYZ, que también podría ser útil: http://swardsonstudios.com/?p=65
Actualización:
Gracias por todas las respuestas votos, así que al final yo fuimos con este código:
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);
}
ahora tengo que pensar en cuál es la respuesta más me ayudó a aceptar: P.
lo está usando coordenadas ?? use coordenadas esféricas polares que x, y, z –
Las coordenadas XYZ que mencioné, son simplemente coordenadas 3D y no tienen ninguna relación con las coordenadas esféricas en absoluto: http://ecommprojects.com/seo/Ahmed-Zewails-4d-Telescope/xyz -coordinates.png –
Encontré que para obtener el lat/long para tener el signo correcto usando SceneKit, necesitaba: latitud flotante = - ((flotante) acosf (result.localCoordinates.y/sphereRadius) - M_PI_2); // theta longitud flotante = M_PI - ((float) atan2f (resultado.localCoordinates.z, resultado.localCoordinates.x));/// phi if (longitud> M_PI) { longitud = longitud - (2.0 * M_PI); } – PKCLsoft