Нарисовать путь вокруг земного шара?

Итак, в основном я хотел бы:

  • Нарисуйте путь между двумя точками на Земле с координатами долготы и широты.
  • Иметь возможность отображать этот путь с несколькими прямыми линиями (например, с OpenGL)
  • Укажите высоту и бонусные баллы за возможность облететь сферу по дуге (например, траекторию полета).
  • Неважно, на каком языке. Я могу перевести :)

Существует формула расстояния «большой круг», но я не уверен, как бы я применил ее к этой задаче.


person gak    schedule 30.09.2012    source источник
comment
Я не знаком с OpenGL. Вы хотите последовательность точек? В сферических координатах или декартовых?   -  person Beta    schedule 01.10.2012
comment
@Beta Да, последовательность точек либо в сферических, либо в декартовых координатах, в зависимости от того, что менее сложно.   -  person gak    schedule 01.10.2012
comment
Вы знаете, как конвертировать между ними? Вы знакомы с идеей матрицы вращения в декартовых координатах?   -  person Beta    schedule 01.10.2012


Ответы (1)


Хорошо, вот мой подход. Если какой-либо из шагов неясен, скажите мне, и я уточню.

  1. We're going from A to B.
  2. We normalize these vectors, a = A/|A|, b = B/|B|. (The magnitudes |A| and |B| will be the radius of the Earth if we're staying on the ground.)
  3. We take the cross-product, c = a x b. We will rotate around this vector, c, to carry A to B, and the magnitude of c is the cosine of the angle between A and B: theta = acos(|c|). Pretty cool, huh?
  4. We don't want to make the trip in one jump, we want n small steps, so we divide theta up. We start at A, then at each step we rotate around c by an angle theta/n.
  5. That gives a path along the ground. To get an arc (maybe starting/ending at some altitude), we decide how much altitude to add at each step (very easy in spherical coordinates-- in Cartesian we must scale the vector).
person Beta    schedule 01.10.2012
comment
Можете ли вы предоставить примеры кода для каждого шага? Мне трудно понять некоторые из этих математических понятий. Вы говорите, что это звучит просто :) Итак, это декартовы координаты, например. А будет точкой x, y, z относительно центра Земли? Третий шаг выглядит так, как будто есть несколько шагов с точки зрения кодирования, которые я не понимаю, как реализовать. - person gak; 01.10.2012
comment
в большинстве языков все операции, перечисленные здесь, являются методами векторного объекта, в противном случае математика немного запутана, какой язык вы используете? - person pseudoDust; 01.10.2012
comment
@GeraldKaszuba, вы не сможете справиться с этой работой, не понимая концепций, и чтобы объяснить их все до базового уровня, потребуется не менее полудюжины страниц. Возможно, будет проще найти онлайн-руководство по векторной алгебре или пообщаться с другом-математиком. Для начала: A — это вектор от центра Земли до точки на поверхности (или рядом с ней). Независимо от того, запишем ли мы A в декартовых, сферических или любых других координатах, это один и тот же вектор, точно так же, как расстояние от Парижа до Рима одинаково, измеряется ли оно в милях или километрах. - person Beta; 01.10.2012
comment
@Beta Да, я понимаю, что ты имеешь в виду. Спасибо за помощь. - person gak; 02.10.2012
comment
@Бета Пошло! Мне гораздо легче понять, когда это переведено в код. :) Вот скриншот: plus.google.com/photos/106001808066334889083/albums/ - person gak; 03.10.2012
comment
@GeraldKaszuba МЫ ПОИГРАЕМ В ИГРУ? - person Beta; 03.10.2012
comment
@ Бета, ха-ха, похоже :) - person gak; 03.10.2012