Convertir latitud y longitud para apuntar en el espacio 3D

Necesito convertir los valores de latitud y longitud a un punto en el espacio tridimensional. He estado intentando esto durante aproximadamente 2 horas, pero no obtengo los resultados correctos.

losEquirectangular las coordenadas provienen deopenflights.org. He probado varias combinaciones decos ypecado, pero el resultado nunca se parecía a nuestra amada tierra.

A continuación, puede ver el resultado de aplicar la conversión.Wikipedia sugiere. Creo que uno puede adivinar a partir del contexto quéc4d.Vector es.

<code>def llarToWorld(latit, longit, altid, rad):
    x = math.sin(longit) * math.cos(latit)
    z = math.sin(longit) * math.sin(latit)
    y = math.cos(longit)
    v = c4d.Vector(x, y, z)
    v = v * altid + v * rad
    return v
</code>

Rojo: X, Verde: Y, Azul: Z

De hecho, se puede identificar América del Norte y del Sur, especialmente las tierras alrededor del Golfo de México. Sin embargo, parece un poco aplastado y un poco en el lugar equivocado ..

Como el resultado parece algo rotado, creo que intenté intercambiar latitud y longitud. Pero ese resultado es algo incómodo.

<code>def llarToWorld(latit, longit, altid, rad):
    temp = latit
    latit = longit
    longit = temp
    x = math.sin(longit) * math.cos(latit)
    z = math.sin(longit) * math.sin(latit)
    y = math.cos(longit)
    v = c4d.Vector(x, y, z)
    v = v * altid + v * rad
    return v
</code>

Así es como se ve el resultado sin convertir los valores.

<code>def llarToWorld(latit, longit, altid, rad):
    return c4d.Vector(math.degrees(latit), math.degrees(longit), altid)
</code>

Pregunta: ¿Cómo puedo convertir la longitud y la latitud correctamente?

Solución

Gracias a TreyA, encontréesta página en mathworks.com. El código que hace su trabajo es el siguiente:

<code>def llarToWorld(lat, lon, alt, rad):
    # see: http://www.mathworks.de/help/toolbox/aeroblks/llatoecefposition.html
    f  = 0                              # flattening
    ls = atan((1 - f)**2 * tan(lat))    # lambda

    x = rad * cos(ls) * cos(lon) + alt * cos(lat) * cos(lon)
    y = rad * cos(ls) * sin(lon) + alt * cos(lat) * sin(lon)
    z = rad * sin(ls) + alt * sin(lat)

    return c4d.Vector(x, y, z)
</code>

En realidad, cambiéy yz Porque la tierra fue rotada entonces, sin embargo, ¡funciona! Ese es el resultado:

Respuestas a la pregunta(3)

Su respuesta a la pregunta