Konvertieren Sie Längen-und Breitengrad-zu-Punkt im 3D-Raum

Brauche ich zum umwandeln von Längen-und Breitengrad-Werte, um einen Punkt im 3-dimensionalen Raum. Ich habe versucht, dies für etwa 2 Stunden jetzt, aber ich komme nicht auf die richtigen Ergebnisse.

Den Equirectangular Koordinaten kommen aus openflights.org. Ich habe versucht, mehrere Kombinationen von cos und Sündeaber das Ergebnis war noch nie so Aussehen wie unsere kleine Geliebte Erde.


Im folgenden können Sie sehen, das Ergebnis der Anwendung der Umwandlung Wikipedia schlägt. Ich denke, man kann erraten aus dem Kontext, was c4d.Vector ist.

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

Konvertieren Sie Längen-und Breitengrad-zu-Punkt im 3D-Raum

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

Kann man in der Tat zu identifizieren Nord - und Südamerika, vor allem das land um den Golf von Mexiko. Allerdings sieht es etwas gequetscht und irgendwie an der falschen Stelle..


Als das Ergebnis sieht etwas gedreht, ich denke, ich habe versucht swapping-breiten-und Längengrad. Aber das Ergebnis ist etwas umständlich.

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

Konvertieren Sie Längen-und Breitengrad-zu-Punkt im 3D-Raum


Dies ist, was das Ergebnis sieht aus wie ohne die Umwandlung der Werte.

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

Konvertieren Sie Längen-und Breitengrad-zu-Punkt im 3D-Raum


Frage: Wie kann ich konvertieren Sie die Länge und Breite richtig?


Lösung

Dank TreyA, fand ich diese Seite auf mathworks.com. Der code, macht es die Arbeit ist die folgende:

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)

Eigentlich, wechselte ich y und z weil die Erde rotiert, dann, jedoch, es funktioniert! Das ist das Ergebnis:

Konvertieren Sie Längen-und Breitengrad-zu-Punkt im 3D-Raum

InformationsquelleAutor der Frage Niklas R | 2012-05-06

Schreibe einen Kommentar