Converter Latitude e Longitude para apontar no espaço 3D
Eu preciso converter os valores de latitude e longitude para um ponto no espaço tridimensional. Eu tenho tentado isso por cerca de 2 horas agora, mas não obtenho os resultados corretos.
oEquirectangular coordenadas vêm deopenflights.org. Eu tentei várias combinações decos epecado, mas o resultado nunca pareceu nossa amada terra.
A seguir, você pode ver o resultado da aplicação da conversãoWikipedia sugere. Acho que se pode adivinhar do contexto o quec4d.Vector
é.
<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>
Vermelho: X, verde: Y, azul: Z
Pode-se realmente identificar as Américas do Norte e do Sul, especialmente as terras ao redor do Golfo do México. No entanto, parece um pouco esmagado e meio que no lugar errado ..
Como o resultado parece um pouco rotacionado, eu acho que tentei trocar latitude e longitude. Mas esse resultado é um pouco estranho.
<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>
É assim que o resultado parece sem converter os valores.
<code>def llarToWorld(latit, longit, altid, rad): return c4d.Vector(math.degrees(latit), math.degrees(longit), altid) </code>
Questão: Como posso converter a longitude e a latitude corretamente?
SoluçãoGraças à TreyA, encontreiisto página em mathworks.com. O código que funciona é o seguinte:
<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>
Na verdade, eu mudeiy
ez
porque a terra foi girada então, no entanto, funciona! Esse é o resultado: