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

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

Поделиться

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

SuslikМодераторwww5 авг. 201719:28#60
iKest
читай внимательно:
> на самом деле если копнуть глубже, то дело именно в том, что ось кватерниона —
> это псевдовектор и на самом деле формулы вращения можно не менять, но тогда
> этот псевдовектор будет вращать вектора в противоположные стороны в зависимости
> от ориентированности системы координат. если же мы хотим, чтобы вращение всегда
> было в одном направлении, знаки в произведениях гиперкомплексных базисных
> векторов(а, следовательно, и в фомулах действия кватерниона на вектор для
> левосторонней системы координат) нужно поменять на противоположные.

знаки можно и не менять, но тогда направление вращения будет противоположно тому, что принято по правилу буравчика.

Правка: 5 авг. 2017 19:31

iKestПостоялецwww5 авг. 201719:35#61
Ну так поэтому в кватернионе мы не только поменяли местами координаты, но и изменили вращение на обратное...
MrShoorУчастникwww5 авг. 201722:35#62
Suslik
> житейская аналогия — это векторные произведения, которые при умножении реальных
> векторов тоже являются псевдовекторами. в правосторонней системе координат
> выполняются равенства векторных произведений:
Не согласен ни с кватернионами, ни с житейской аналогией. В числах и в операциях нет совершенно никакой информации о том, в правой или левой СК идет работа. Никто не мешает нам сказать наоборот, что вот это левосторонняя СК:
Изображение
А вот это правосторонняя СК:
Изображение
А еще можно сказать, что у нас операция и для правой и для левой СК одинакова:
ИзображениеНо результатом операции для правой СК будет противоположный вектор в левой СК.
Попытка же сказать что вот это правая:
Изображение
, а вот это левая:
Изображение
Сродни попытке определить начало координат во вселенной (разве что множество меньше).

Ну и то же самое с кватернионом. В нем просто нет информации о том, в какой СК он построен, и если ты переходишь в противоположную СК, то будь добр конвертни кватернион. Правая/левая СК - это в реальном мире, а в числах этой инфы уже нет.

alexzzzzПостоялецwww6 авг. 20174:23#63
Конечно проще принять, что X×Y=Z всегда, независимо от СК.

В разных СК буравчики разные. В правосторонней СК буравчик закручивается направо (по часовой стрелке), в левосторонней ― налево. При повороте от X к Y буравчик в любой СК всегда движется в сторону Z. Угол, совпадающий с направлением закручивания буравчика в конкретной СК, положительный, несовпадающий ― отрицательный.

SuslikМодераторwww6 авг. 20175:41#64
alexzzzz
> В разных СК буравчики разные. В правосторонней СК буравчик закручивается
> направо (по часовой стрелке), в левосторонней ― налево. При повороте от X к Y
> буравчик в любой СК всегда движется в сторону Z. Угол, совпадающий с
> направлением закручивания буравчика в конкретной СК, положительный,
> несовпадающий ― отрицательный.
да, но тогда кватернионы оказываются несовместимые между разными системами координат. угловые скорости оказываются тоже несовместимы.

MrShoor
> Никто не мешает нам сказать наоборот, что вот это левосторонняя СК
конечно, не мешает. просто буравчик угловой скорости уже определён единственным образом. аналогично единственным образом уже определён положительный угол поворота для кватернионов. и все формулы определяют эти направления корректно только в системе координат единственной ориентированности, в противоположной ориентированности нужно либо менять знак, либо считать, что буравчик другой(несовместимость со стандартным).

iKestПостоялецwww6 авг. 20179:48#65
В общем сейчас договоримся до тензоров и роторов алгебры Клиффорда, хотя у топикстартера был элементарный вопрос и не понятно, почему он до сих пор не разрешился...
MrShoorУчастникwww6 авг. 201713:04#66
Suslik
> просто буравчик угловой скорости уже определён единственным образом. аналогично
> единственным образом уже определён положительный угол поворота для
> кватернионов.
Для угловой скорости да. А вот для кватерниона я такого чет не встречал, а скорее встречал наоборот, что правостороння/левосторонняя СК для кватерниона не определена.

Правка: 6 авг. 2017 13:05

iKestПостоялецwww6 авг. 201713:24#67
Ну на самом деле оказывается определена, потому-то кватернион состоит из скаляра (не зависит от базиса) и вектора (вернее псевдовектора) и поэтому таблица умножения базисных кватернионов для каждой ориентации базиса будет разной.

Правка: 6 авг. 2017 13:25

alexzzzzПостоялецwww6 авг. 201716:35#68
Suslik
>> В разных СК буравчики разные. В правосторонней СК буравчик закручивается
>> направо (по часовой стрелке), в левосторонней ― налево. При повороте от X к Y
>> буравчик в любой СК всегда движется в сторону Z. Угол, совпадающий с
>> направлением закручивания буравчика в конкретной СК, положительный,
>> несовпадающий ― отрицательный.

> да, но тогда кватернионы оказываются несовместимые между разными системами
> координат. угловые скорости оказываются тоже несовместимы.

Несовместимы в каком смысле?

Если в том, что нельзя в одной операции смешивать между собой кватернионы, заданные в разных СК, то это справедливо для кватернионов из любых разных СК. Например, имеется две правосторонние системы координат, но у одной вверх Y, а у другой вверх Z. Одинаковый поворот вокруг вертикальной оси в них задаётся по разному, и прежде чем объединять два таких кватерниона, их надо перевести в какую-то одну СК.

Мне вариант с двумя разными буравчиками нравится тем, что математика используется одинаковая:

1. Берём данные в какой-то системе координат.
2. Применяем к ним стандартные формулы, не думая ни про плюсы/минусы, ни про порядок обхода осей. Вообще плевать на СК.
3. Результат интерпретируем, используя правильный буравчик.

iKest
> у топикстартера был элементарный вопрос и не понятно, почему он до сих пор не
> разрешился...

Потому что для решения недостаточно данных (нам). Даже если кватернион мы правильно перевели из одной СК в другую, непонятно, в какой системе координат задано то, к чему этот кватернион применяется.

Тестовый проект в Unity решил бы все неоднозначности: вот хрень, которая вращается; вот пачка кватернионов на входе; надо что-то как-то преобразовать так, чтобы они вращали эту хрень вот в таком направлении.

TrouyanПостоялецwww7 авг. 20170:17#69
alexzzzz
> Тестовый проект в Unity решил бы все неоднозначности: вот хрень, которая
> вращается; вот пачка кватернионов на входе; надо что-то как-то преобразовать
> так, чтобы они вращали эту хрень вот в таком направлении.

Интересный  вариант, не знаю что из этого получится но завтра попробую....
Уже подумываю сходить на кафедру пообщаться с профессорами ...

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

alexzzzzПостоялецwww7 авг. 20172:30#70
Trouyan
> в итоге векторное произведение двух векторов в разных СК дает разный результат,
> видать тоже самое и с кватернионами.

(1,0,0) × (0,1,0) = (0,0,1) в любой системе координат.

Если считать, что вектор (0,0,1) ― разный, я могу и пострашнее пример привести: вектор (1,2,3) сам по себе без лишних операций даёт разный результат в разных СК.

PS
Ещё страшнее и вообще без векторов:

+ Показать

Правка: 7 авг. 2017 2:37

SuslikМодераторwww7 авг. 20176:30#71
alexzzzz
> (1,0,0) × (0,1,0) = (0,0,1) в любой системе координат.
в том-то и дело, что получается, что фундаментальное свойство образованной тройки векторов, их ориентированность, зависит от ориентированности системы координат. выдержка из википедии:
Using the cross product requires the handedness of the coordinate system to be taken into account (as explicit in the definition above). If a left-handed coordinate system is used, the direction of the vector n is given by the left-hand rule and points in the opposite direction.

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

Правка: 7 авг. 2017 6:30

MrShoorУчастникwww7 авг. 20177:35#72
Suslik
> мне кажется, что в таких ситуациях проще принять, что одинаковые кватернионы
> определяют один и тот же поворот вне зависимости от системы координат, но для
> этого действие кватерниона на вектор нужно трактовать по-разному в зависимости
> от ориентированности системы.
Как раз таки проще задать правила перевода данных из СК ввода/вывода в операционную СК, а не городить разные операции. Поясню. Система координат ввода/вывода - это данные на входе и на выходе, а операционная система координат - это все промежуточные данные, в которых работает программа. В операционной СК векторное произведение всегда (1,0,0) × (0,1,0) = (0,0,1). На уровне системы ты например можешь декларировать, что она работает с левосторонней СК, и тогда тебе остается применить ко входным/выходным данным в правосторонней СК всего лишь одно преобразование и все. Это намного проще, потому что:
1. На стыке двух систем у тебя есть данные по каждой из них. А так как ты предлагаешь - надо будет тянуть дополнительную информацию о том, какие это вектора, из правой СК или из левой.
2. Не надо плодить операции, все описывается единообразно.
3. Никаких тебе проблем, если вдруг надо перемножить вектор из правой СК на вектор в левой СК.

Так что принять, что:
> (1,0,0) × (0,1,0) = (0,0,1) в любой системе координат.
Намного проще, чем то, что в половине случаев там может быть (0,0,1), а в другой половине (0,0,-1).

iKestПостоялецwww7 авг. 20179:28#73
>Ещё страшнее и вообще без векторов:
>1 чебурашка + 1 чебурашка = 2 чебурашки

Нет, ещё страшнее:

+ Показать

В принципе тензоры из-за того и придумали, что-бы операции в многомерной алгебре не зависили от ориентации пространства. Векторы и кватернионы этими свойствами не обладают...

TrouyanПостоялецwww8 авг. 201713:01#74
И всё же решение до сих пор не очевидно =( ... получаю матрицу из кватерниона перевожу ее в другую СК(из правой в левую), и далее перевожу назад в кватерниоин (на данном шаге скорее всего происходит ошибка)... и получается ерунда....

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

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

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