Konwertuj szerokość i długość geograficzną, aby wskazać przestrzeń 3D

Muszę przekonwertować wartości szerokości i długości geograficznej na punkt w przestrzeni trójwymiarowej. Próbuję tego od około 2 godzin, ale nie uzyskuję poprawnych wyników.

TheRównoboczny współrzędne pochodzą zopenflights.org. Próbowałem kilku kombinacjisałata igrzech, ale rezultat nigdy nie przypominał naszej ukochanej ziemi.

Poniżej możesz zobaczyć wynik zastosowania konwersjiWikipedia wskazuje. Myślę, że można odgadnąć z kontekstu, coc4d.Vector jest.

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

Czerwony: X, Zielony: Y, Niebieski: Z

Można rzeczywiście zidentyfikować Amerykę Północną i Południową, zwłaszcza ziemię wokół Zatoki Meksykańskiej. Wygląda to jednak trochę zgniecione i jakby w złym miejscu ..

Ponieważ wynik wygląda nieco obrócony, myślę, że próbowałem zamienić szerokość i długość geograficzną. Ale ten wynik jest nieco niezręczny.

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

Tak wygląda wynik bez konwersji wartości.

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

Pytanie: Jak poprawnie przekonwertować długość i szerokość geograficzną?

Rozwiązanie

Dzięki TreyA znalazłemto strona na mathworks.com. Kod, który działa, jest następujący:

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

Właściwie to zmieniłemy iz ponieważ ziemia została wtedy obrócona, to działa! To jest wynik:

questionAnswers(3)

yourAnswerToTheQuestion