TL; DR
У меня есть кватернион, представляющий ориентацию сферы (земного шара). Из кватерниона я хочу получить широту / долготу. Я могу мысленно представить себе этот процесс, но плохо разбираюсь в математике (матрицы / кватернионы) и не намного лучше разбираюсь в коде (все еще изучаю OpenGL / GLM). Как я могу этого добиться? Это для использования в OpenGL с использованием C ++ и библиотеки GLM.
Расширенная версия
Я создаю картографическую программу на основе земного шара - мало чем отличается от Google Earth, но для специальной цели, к которой GE не может быть адаптирована.
Я делаю это на C ++, используя OpenGL с библиотекой GLM.
Я успешно закодировал сферу и использую кватернион непосредственно для представления ее ориентации. Никаких углов Эйлера. Я могу вращать земной шар с помощью движений мыши, таким образом вращая земной шар по произвольным осям в зависимости от текущей точки обзора и ориентации.
Однако я хотел бы получить широту и долготу точки на сфере не только для пользователя, но и для внутреннего использования в программе.
Я могу представить себе, что это ДОЛЖНО быть возможным. Представьте себе сферу в мировом пространстве без каких-либо вращений. Если исходить из правила правой руки OpenGL, северный полюс направлен вверх по оси Y, а экватор параллелен плоскости X / Z. Широта / долгота вверх по оси Y, таким образом, 90N, а что-то еще E / W (вырожденное). Главный меридиан будет на оси + Z.
Если земной шар / сфера вращается произвольно, северный полюс земного шара теперь находится в другом месте. Эту точку можно сопоставить с широтой / долготой исходной сферы до вращения. Представьте себе две накладывающиеся друг на друга сферы, одна из которых вращается, а другая - фиксированная точка отсчета.
(На самом деле, это было бы наоборот. Я ищу широту / долготу, это точка на повернутой сфере, которая соотносится с северным полюсом невращающейся эталонной сферы)
Мне кажется, что каким-то образом я смогу получить вектор оси ориентации земного шара из его кватерниона и сравнить его с невращающейся сферой. Но я просто не могу понять, как это сделать. (Думаю, я до сих пор не совсем понимаю маты и четвертичные, и пока что добился успеха только по зевке)
Я надеюсь достичь этого без ускоренного курса по глубокой математике. Я ищу решение / понимание / руководство с точки зрения возможности использовать библиотеку GLM для достижения моей цели. В идеале пример кода с некоторым общим объяснением. Лучше всего я учусь на примере.
К вашему сведению, в моем коде вращение шара / сферы полностью не зависит от камеры (которая использует углы Эйлера), поэтому ее можно перемещать независимо. Так что я ничего не могу использовать с камеры, чтобы определить это.