Вращение кватерниона на широту / долготу

TL; DR
У меня есть кватернион, представляющий ориентацию сферы (земного шара). Из кватерниона я хочу получить широту / долготу. Я могу мысленно представить себе этот процесс, но плохо разбираюсь в математике (матрицы / кватернионы) и не намного лучше разбираюсь в коде (все еще изучаю OpenGL / GLM). Как я могу этого добиться? Это для использования в OpenGL с использованием C ++ и библиотеки GLM.

Расширенная версия
Я создаю картографическую программу на основе земного шара - мало чем отличается от Google Earth, но для специальной цели, к которой GE не может быть адаптирована.

Я делаю это на C ++, используя OpenGL с библиотекой GLM.

Я успешно закодировал сферу и использую кватернион непосредственно для представления ее ориентации. Никаких углов Эйлера. Я могу вращать земной шар с помощью движений мыши, таким образом вращая земной шар по произвольным осям в зависимости от текущей точки обзора и ориентации.

Однако я хотел бы получить широту и долготу точки на сфере не только для пользователя, но и для внутреннего использования в программе.

Я могу представить себе, что это ДОЛЖНО быть возможным. Представьте себе сферу в мировом пространстве без каких-либо вращений. Если исходить из правила правой руки OpenGL, северный полюс направлен вверх по оси Y, а экватор параллелен плоскости X / Z. Широта / долгота вверх по оси Y, таким образом, 90N, а что-то еще E / W (вырожденное). Главный меридиан будет на оси + Z.

Если земной шар / сфера вращается произвольно, северный полюс земного шара теперь находится в другом месте. Эту точку можно сопоставить с широтой / долготой исходной сферы до вращения. Представьте себе две накладывающиеся друг на друга сферы, одна из которых вращается, а другая - фиксированная точка отсчета.

(На самом деле, это было бы наоборот. Я ищу широту / долготу, это точка на повернутой сфере, которая соотносится с северным полюсом невращающейся эталонной сферы)

Мне кажется, что каким-то образом я смогу получить вектор оси ориентации земного шара из его кватерниона и сравнить его с невращающейся сферой. Но я просто не могу понять, как это сделать. (Думаю, я до сих пор не совсем понимаю маты и четвертичные, и пока что добился успеха только по зевке)

Я надеюсь достичь этого без ускоренного курса по глубокой математике. Я ищу решение / понимание / руководство с точки зрения возможности использовать библиотеку GLM для достижения моей цели. В идеале пример кода с некоторым общим объяснением. Лучше всего я учусь на примере.

К вашему сведению, в моем коде вращение шара / сферы полностью не зависит от камеры (которая использует углы Эйлера), поэтому ее можно перемещать независимо. Так что я ничего не могу использовать с камеры, чтобы определить это.


person Skywise    schedule 12.08.2015    source источник
comment
Можете ли вы представить себе объем спама, который получил бы SO, если бы вам не требовалась репутация для публикации изображения?   -  person Bathsheba    schedule 12.08.2015
comment
@genpfault, я бы спросил об этом в частном порядке, но, видимо, нет системы личных сообщений. Как новый пользователь, я хотел бы получить объяснение по поводу редактирования моего сообщения. Было ли удаленное содержание нарушением какого-либо правила? Если да, не могли бы вы указать мне прямо на указанное правило и на то, как именно я его нарушил? Разве однострочная шутливая шутка с критикой неожиданного открытия необходимости «репутации» для публикации изображения вряд ли гарантирует полное удаление указанного контента? Я не понимаю, насколько то, что я сказал, может причинить вред. Пожалуйста, помогите мне избежать плохого первого впечатления от использования Stack Exchange.   -  person Skywise    schedule 13.08.2015
comment
@genpfault - Я только что заметил, что даже мое вступление, указывающее, что я здесь новый пользователь, было удалено. Новый пользователь, первый пост. Почему? Это было сделано для того, чтобы читатели (такие как вы) знали, что я здесь новенький, и если я сделаю что-то не так, надеюсь, они (как и вы) поймут и вежливо поправят меня. Но если обычное редактирование сообщений и комментариев здесь является нормой, это объясняет мое замешательство по поводу других сообщений и ответов, которые я читал, когда я вижу ответы, не имеющие контекста, или они относятся к другим ответам, которые я даже не могу найти. Теперь у меня ДЕЙСТВИТЕЛЬНО сложилось плохое впечатление о Stack Exchange.   -  person Skywise    schedule 13.08.2015
comment
Просто общий шум уменьшение.   -  person genpfault    schedule 13.08.2015
comment
Сказать «привет» - это шум? Извините, но это просто глупо. Однако в будущем я буду стараться строить свои будущие сочинения совершенно бесчеловечным, бесчувственным и сухим вулканским способом.   -  person Skywise    schedule 13.08.2015
comment
Кроме того, возможно, эту информацию следует добавить на страницу вводного тура. Я прочитал это и TOS перед регистрацией, так что это объясняет мою реакцию. Это застало меня врасплох. Это все равно, что покупать машину только для того, чтобы после подписания чека узнать, что в ней нет бензобака. Извините за тираду. Я оставлю это как есть. Но я просто не могу перестать смеяться над тем, насколько это глупо.   -  person Skywise    schedule 13.08.2015


Ответы (1)


Возможно, вы могли бы попробовать перейти по этой ссылке (например, использовать boost;)) из этого потока Долгота / Широта до кватерниона, а затем вычесть обратную величину этого преобразования. Или вы также можете добавить шаг, преобразовав свой кватернион в угол Эйлера?

person Nox    schedule 12.08.2015