Konvertieren Sie Breiten- und Längengrade in Punkte im 3D-Raum

Ich muss Breiten- und Längengrade in einen Punkt im dreidimensionalen Raum umrechnen. Ich habe es jetzt ungefähr 2 Stunden lang versucht, aber ich erhalte nicht die korrekten Ergebnisse.

DasEquirectangular Koordinaten kommen vonopenflights.org. Ich habe verschiedene Kombinationen von ausprobiertcos undSünde, aber das Ergebnis sah nie aus wie unsere kleine geliebte Erde.

Im Folgenden sehen Sie das Ergebnis der Anwendung der KonvertierungWikipedia schlägt vor. Ich denke man kann aus dem Zusammenhang was erratenc4d.Vector ist.

<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>

Rot: X, Grün: Y, Blau: Z

Man kann in der Tat Nord- und Südamerika identifizieren, insbesondere das Land um den Golf von Mexiko. Es sieht jedoch etwas zerquetscht und irgendwie am falschen Ort aus.

Da das Ergebnis etwas gedreht aussieht, habe ich versucht, Längen- und Breitengrade auszutauschen. Aber das Ergebnis ist etwas umständlich.

<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>

So sieht das Ergebnis aus, ohne die Werte zu konvertieren.

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

Frage: Wie kann ich Längen- und Breitengrad korrekt umrechnen?

Lösung

Dank TreyA habe ich gefundendiese Seite auf mathworks.com. Der Code, der seine Arbeit erledigt, ist der folgende:

<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>

Eigentlich habe ich gewechselty undz weil die erde dann aber gedreht wurde, funktioniert es! Das ist das Ergebnis:

Antworten auf die Frage(3)

Ihre Antwort auf die Frage