Преобразование широты и долготы в точку в трехмерном пространстве
Мне нужно преобразовать значения широты и долготы в точку в трехмерном пространстве. Я пытался сделать это около 2 часов, но я не получил правильных результатов.
Equirectangular координаты приходят изopenflights.org, Я пробовал несколько комбинацийcos а такжеsin, но результат никогда не был похож на нашу маленькую любимую землю.
Далее вы можете увидеть результат применения конверсииВикипедия предлагает. Я думаю, из контекста можно догадаться, чтоc4d.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>
Red: X, Green: Y, Blue: Z
Можно действительно идентифицировать Северную и Южную Америку, особенно землю вокруг Мексиканского залива. Тем не менее, это выглядит несколько раздавленным и вроде не в том месте ..
Поскольку результат выглядит несколько повернутым, я думаю, что я попытался поменять местами широту и долготу. Но этот результат несколько неловкий.
<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>
Вот как выглядит результат без преобразования значений.
<code>def llarToWorld(latit, longit, altid, rad): return c4d.Vector(math.degrees(latit), math.degrees(longit), altid) </code>
Question: Как правильно преобразовать долготу и широту?
SolutionБлагодаря TreyA я нашелэтот страница на mathworks.com. Код, который выполняет эту работу, является следующим:
<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>
На самом деле я перешелy
а такжеz
потому что земля была повернута, однако, это работает! Это результат: