Могу ли я переключить X Y Z в кватернионе?

у меня есть система координат, где ось Y вверх. Мне нужно преобразовать его в систему координат, где Z находится вверху. У меня есть повороты, хранящиеся в кватернионах, поэтому мой вопрос: если у меня есть кватернион X, Y, Z, могу ли я поменять Y на Z и получить результат, что Z на самом деле ВВЕРХ?


person Captain GouLash    schedule 19.04.2013    source источник


Ответы (4)


Просто поменять местами две оси в кватернионах? Нет, это не работает, потому что это переворачивает хиральность. Однако, если вы перевернете хиральность и отрицаете действительную часть кватерниона, вы вернетесь к исходной хиральности. В общем виде вы можете записать это как

Q'(Q, i'j'k') = εi'j'k' Qw_w + Qi_i + Q j_j + Qk_k

куда

Определение символа Леви-Чевита

является полностью антисимметричным тензором, известным как символ Леви-Чевита.

Это не должно быть сюрпризом, так как правила кватернионов i², j², k² также определяются одним и тем же полностью антисимметричным тензором.

person datenwolf    schedule 19.04.2013
comment
так что это говорит мне что-то вроде new.w = old.w ; новый.х = -старый.х; новый.y=- старый.z ; новый.z= новый.у; ? предполагая, что НОВЫЙ = Z ВВЕРХ, X ВПРАВО, Y по направлению к экрану и СТАРЫЙ = Y ВВЕРХ, X ВПРАВО, Z по направлению ко мне? - person Captain GouLash; 19.04.2013
comment
относится ли это также к значению W кватерниона? - person Captain GouLash; 19.04.2013
comment
Хм, на самом деле мне нужно подумать об этом. W содержит угол поворота, поэтому технически (если я не ошибаюсь) вы должны инвертировать только W и оставить знаки остальных элементов такими, какие они есть. - person datenwolf; 19.04.2013
comment
@CaptainGouLash: Честно говоря, на практике мне никогда не приходилось менять хиральность кватерниона. Я точно знаю, что это полностью антисимметричная операция и что вы можете сделать это, используя символ Леви-Чевита. - person datenwolf; 19.04.2013
comment
Отрицание всех 4 компонентов кватерниона не повлияет на вращение. Если вы хотите перевернуть хиральность, отрицая вещи, вам нужно взять сопряжение, которое отрицает только части i/j/k (или, что то же самое, отрицает только реальную часть...). - person comingstorm; 19.04.2013
comment
@comingstorm: Это действительно так. Если вы посмотрите на мой ответ, вы увидите, что я отредактировал его несколько часов назад (обратите внимание, что я явно написал символ Леви Чевита, чтобы воздействовать только на компонент w). Я также уточнил предложение по этому поводу в этот самый момент. - person datenwolf; 20.04.2013

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

Вероятно, лучше всего рассмотреть это в контексте того, как вы конвертируете угол и ось в кватернион. В Википедии можно прочитать, что вы описываете поворот на угол θ вокруг оси с единичным направлением вектор (x, y, z), используя

q = cos(θ/2) + sin(θ/2)(xi + yj + zk)

Ваш пост сообщает нам только Y ↦ Z, то есть старое направление Y является новым направлением Z. А остальные направления? Вы, вероятно, захотите оставить X ↦ X, но это по-прежнему оставляет нам две альтернативы.

  1. Либо вы используете Z ↦ Y. В этом случае вы переключаетесь между левой и правой системой координат, и преобразование по существу является отражением.
  2. Или вы используете Z ↦ −Y, тогда это просто поворот на 90° вокруг оси X. Ручность системы координат остается прежней.

Изменение хиральности

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

cos(−θ/2) + sin(−θ/2)(xi + zj + yk)

По сравнению с предыдущим, действительная часть не меняется (поскольку cos(x)=cos(−x)) но мнимые части меняют свой знак, в дополнение к менять по порядку. Обобщая это, кватернион a + bi + cj + dk, описывающий вращение в старой системе координат, будет преобразован в a − bi − dj − ck в новой системе координат. Или в −a + bi + dj + ck, которое является другим описанием того же вращения (поскольку оно изменяет θ на 360°, а θ/2 — на 180°).

Сохраненная хиральность

По сравнению с этим, второй случай Z ↦ −Y сохраняет знак θ, поэтому вам нужно только отрегулировать ось. Новая координата Z — это старая координата Y, а новая координата Y — это старая координата Z с инверсией. Таким образом, a + bi + cj + dk преобразуется в a + bi − dj + ck (или его отрицательное значение). Обратите внимание, что это просто умножение кватерниона на i или −i, в зависимости от того, на какую сторону вы его умножаете. Если вы хотите записать это как сопряжение, у вас есть θ = ± 45 °, поэтому вы получаете квадратные корни в кватернионе, выражающем изменение системы координат.

person MvG    schedule 24.08.2016

Попробуйте: вращение кватерниона = новый кватернион (X, Z, Y, -W); //мне пришлось поменять местами Z и Y из-за

person jazzyjester    schedule 21.01.2016

Нет, вы не можете поменять местами y и z — она превратится в левостороннюю систему координат, если она была правосторонней (и наоборот).

Однако вы можете сделать следующую замену:

newX = oldZ
newY = oldX
newZ = oldY

Я подозреваю, что вам на самом деле нужно простое вращение вокруг оси x. Если именно поэтому вы хотите поменять местами y и z, вместо этого вам следует применить поворот на -90 градусов вокруг оси +x (при условии, что у вас правосторонняя система координат).

person Rahul Banerjee    schedule 19.04.2013
comment
Ну, технически вы можете поменять местами Y и Z или сделать любую другую полностью антисимметричную перестановку, если вы масштабируете кватернион в соответствии с тензором Леви-Чевита. - person datenwolf; 19.04.2013
comment
Не знал о тензоре перестановок. Спасибо! - person Rahul Banerjee; 19.04.2013