2015-08-12 8 views
2

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

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

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

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

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

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

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

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

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

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

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

+0

Можете ли вы представить объем спама, который будет получен SO, если вы не нуждаетесь в репутации для публикации изображения? – Bathsheba

+0

@genpfault, я бы спросил об этом в частном порядке, но, видимо, нет частной системы сообщений. Будучи новым пользователем, я хотел бы получить объяснение для редактирования моего сообщения.Было ли удаленное содержимое нарушением какого-либо правила? Если да, можете ли вы указать мне прямо на указанное правило и точно, как я его нарушил? Разумеется, однострочное шуточное высказывание критики о неожиданном обнаружении необходимости «репутации» для публикации изображения вряд ли оправдывает кратковременное удаление указанного контента? Я не понимаю, как то, что я сказал, не навредил. Пожалуйста, помогите мне избежать плохого первого впечатления от моего использования Stack Exchange. – Skywise

+0

@genpfault - Я только заметил, что даже мое введение, указывающее, что я новый пользователь, здесь было удалено. «Новый пользователь, первый пост». Зачем? Это было сделано так, чтобы читатели (например, вы) знали, что я здесь новый, и если бы я сделал что-то не так, надеюсь, они (как и вы) понимали бы и вежливо меня исправляли. Но если здесь будут нормы редактирования сообщений и комментариев, это объяснит мою путаницу в других сообщениях и ответах, которые я прочитал, когда вижу ответы, которые не имеют контекста, или они относятся к другим ответам, которые я даже не могу найти. Теперь у меня плохое впечатление от Stack Exchange. – Skywise

ответ

0

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

Смежные вопросы