Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Кватернион в новой системе координат (2 стр)

Кватернион в новой системе координат (2 стр)

Поделиться

Страницы: 1 2 3 4 5 6 Следующая

FordPerfectПостоялецwww2 авг. 20172:57#15
Тааааааак.

Тебе что нужно?

Если по кватерниону, описывающему поворот в правой СК составить кватернион, описывающий тот же поворот в левой  системе координат - так решение выше. У СК флипается одна координата, а у кватерниона две.

Если тебе нужно кватернион который сам переводит базис во флипнутый по одной оси - не получится. Матрица поворота соответствующая кватерниону - всегда с определителем +1.

>правый кватернион
Что? Вроде же handedness - это свойство СК (или наше интерпретации её), у кватерниона её тупо нет.

>Понимаю что это легко сделать в углах Эйлера, но из gimbal lock данный метод не подходит...
Эээ? Как бы ты это делал в углах Эйлера?
Может, если опишешь, станет понятнее, что за задачу ты пытаешься решить.

>В итоге имею смену направления сразу двух осей.... а надо изменить только одну =(
Осей чего? Как именно получена эта картинка.

alexzzzzПостоялецwww2 авг. 20173:03#16
Trouyan
> alexzzzz - конечно хотелось бы так просто, но с кватернионом такое не прокатит.

С одним кватернионом прокатывает ― направление вращения вокруг этой оси инвертируется.

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

Правка: 2 авг. 2017 14:27

iKestПостоялецwww2 авг. 20179:04#17
Какое нахер вращение вокруг определенной оси? Вы с углами Эйлера не попутали? Столько воды на ровном месте.....
TrouyanПостоялецwww2 авг. 201714:15#18
Углы Эйлера, кватернионы, матрица поворотов, направляющие косинусы и т.д. -  всё это одно и тоже, а именно ориентация объекта в пространстве выраженная разными способами( поправьте пожалуйста если Я не прав). И всё это задается в какой-то конкретной СК, т.е. в каком-то конкретном базисе.

Попробую описать задачу другими словами:
Есть физический объект -сенсор. С данным сенсором связана правая СК ( ее обычно так и называют связанная СК). Имеется программа на Unity, которая прорисовывает куб  - назовем это мат моделью. В Unity имеется глобальная и локальная (связанная с кубом) СК, обе левые.
Сенсор выдает свою ориентацию (и соответственно ориентацию связанной с ним СК) в виде кватерниона. Мат модель дублирует его положение на PC.

Так вот, хотелось бы иметь возможность изменить направление вращения вокруг одной любой оси локальной СК в мат. модели.

В углах Эйлера это сделать легко изменив знак одного из углов. Т.е если например крен был 45град , то получим крен в обратном направлении -45град.
Но как Я выше писал не могу их использовать из-за gimbal lock.

Можно ли без углов Эйлера получить нужный результат?

Правка: 2 авг. 2017 14:21

iKestПостоялецwww2 авг. 201714:42#19
Гимбал Лок легко обходится. Изменение вращения вокруг одной оси приводит к сложно-предсказуемой ориентации, зависящей от порядка комбинации углов.
Ещё раз повторю - скажите (или нарисуйте) направление осей базиса, который отдаёт сенсор, тогда всё будет проще...

Правка: 2 авг. 2017 14:45

TrouyanПостоялецwww2 авг. 201715:02#20
Имеем следующие базисы:
Оси сенсора и модели | Кватернион в новой системе координат

Появилась идея как это решить, но уж больно муторно кажется будет:
1. Зная начальный и конечный кватернионы найти скорость вращения кватерниона.
2. Из кватерниона скоростей найти угловые скорости вращения в связанной СК.
3. Изменить знак в нужного компонента в векторе скорости.
4. Сделать обратное преобразование...

Но может есть более простой способ ?

alexzzzzПостоялецwww2 авг. 201715:34#21
Trouyan
> Имеем следующие базисы:

Переставляем местами компоненты Y и Z и направляем вектор оси в кватернионе в противоположную сторону, чтобы в новой системе координат сохранилось направление исходного вращения:

(x, y, z, w) <=> (-x, -z, -y, w)

iKestПостоялецwww2 авг. 201715:40#22
alexzzzz
>(x, y, z, w) <=> (-x, -z, -y, w)

Именно так и есть. А то накрутили фигни всякой с матрицами, элерами, угловыми скоростями...

TrouyanПостоялецwww2 авг. 201715:59#23
Вот что дает такое преобразование.
Если до него, вращение по осям сенсора OX  и OY соответствовало вращению модели по таким же осям и в тех же направлениях. А ось OZ вращалась в противоположную сторону. То после данного преобразования, да OX поменяла свое направление, но одновременно OZ и OY поменялись местами... и теперь OZ сенсора вращает OY  модели.... такие ходы уже неделю назад перепробывал.
И как видно из рисунка, базис модели как был левый, таким и остался...
На рисунке индекс М - модель, индекс С - сенсор.

Преобразование осей | Кватернион в новой системе координат

iKestПостоялецwww2 авг. 201716:26#24
Да достал ты уже с осями!!!! Забудь! Кватернион не имеет к ним никакого отношения. У него своя ось (ОДНА!) и угол поворота.

Правка: 2 авг. 2017 16:29

FordPerfectПостоялецwww2 авг. 201716:40#25
>Углы Эйлера, кватернионы, матрица поворотов, направляющие косинусы и т.д. - всё это одно и тоже, а именно ориентация объекта в пространстве выраженная разными способами( поправьте пожалуйста если Я не прав). И всё это задается в какой-то конкретной СК, т.е. в каком-то конкретном базисе.
>Попробую описать задачу другими словами:
>Есть физический объект -сенсор. С данным сенсором связана правая СК ( ее обычно так и называют связанная СК). Имеется программа на Unity, которая прорисовывает куб - назовем это мат моделью. В Unity имеется глобальная и локальная (связанная с кубом) СК, обе левые.
>Сенсор выдает свою ориентацию (и соответственно ориентацию связанной с ним СК) в виде кватерниона. Мат модель дублирует его положение на PC.
До сих пор - хорошо сформулировано.

>Так вот, хотелось бы иметь возможность изменить направление вращения вокруг одной любой оси локальной СК в мат. модели.
А вот здесь стрёмно.

>В углах Эйлера это сделать легко изменив знак одного из углов. Т.е если например крен был 45град , то получим крен в обратном направлении -45град.
>Но как Я выше писал не могу их использовать из-за gimbal lock.
До тех пор пока мы вращаем вокруг одной кардинальной оси - работает. Для произвольного поворота - выходит хрень (хотя бы потому что результирующий поворот, после такой замены, будет разным, в зависимости от того которая из систем углов Эйлера (их 12 или 24, смотря как считать; по сути - порядок в котором выполняются повороты вокруг кардинальных осей) использовалась).

Правка: 2 авг. 2017 16:42

TrouyanПостоялецwww2 авг. 201716:40#26
iKest, Вы заблуждаетесь =)
Кватернион задает вектор и угол вращения, а любой вектор задается в какой-то СК, у которой есть свои базис и соответственно ОСИ =)  - это что касается глобальной СК в которой мы работаем.
А если с телом связать локальную СК, то переход от одной к другой может задаваться кватернионом ...и как тут ни какого отношения к осям ?
И на всякий случай добавлю, что данный вектор задается не координатами (как обычно), а направляющими косинусами умноженными на синус половины угла.
В любом случае имеет он к осям отношение или нет, Я вполне допускаю, что через кватернион напрямую нет возможности менять направление вращения, поэтому и пробовал матрицы поворота, векторы угловых скоростей, ну и обсуждение проблемы на данном форуме =)

Правка: 2 авг. 2017 16:44

FordPerfectПостоялецwww2 авг. 201716:42#27
Возможно причина сложностей в том, что сложение поворотов - не коммутирует, но сложение угловых скоростей - коммутирует. И малые повороты - почти коммутируют, и расхождения сложнее заметить.
FordPerfectПостоялецwww2 авг. 201716:46#28
Т. е. разложить угловую скорость на три компоненты - осмысленное действие.
Разложить поворот на три компоненты - нет.

Похоже, Trouyan оперирует термином "вращение", считая, что он подходит и к тому и к другому.

iKestПостоялецwww2 авг. 201716:57#29
Trouyan
Вы бредите. Срочно учите теорию. И как применять кватернионы в графике.

Страницы: 1 2 3 4 5 6 Следующая

/ Форум / Программирование игр / 2D графика и изометрия

2001—2017 © GameDev.ru — Разработка игр