Переключить хиральность кватерниона в коде?

У меня есть кватернионные данные, которые я пытаюсь переключить из правого координатного пространства Y-вверх в левое координатное пространство Z-вверх. Из прочитанного по этому вопросу, что мне нужно сделать, это switch the chirality,

Единственная информация, которую я могу найти, это

И я не могу обернуть голову вокруг этого.

Скажи, что у меня есть кватернион как:

public static float[] quat= new float[4](0.70711,0.70711,0,0);

В коде C#, как я могу переключить хиральность?

Я пытался отрицать ось, и просто поменять местами Z а также Y ценности. Я попытался умножить кватернион на другой кватернион, равный 90 градусам, как предложено в этой ссылке. и до сих пор вижу неправильные повороты.

Спасибо.

1 ответ

Предполагая, что ваша исходная система координат A имеет X вправо, Y вверх, Z к камере. Новая система координат B имеет право X, Y на камеру и Z вверх. По сути, вам нужно поменять оси Y и Z. Прямо сейчас? И у вас есть кватернион q, который описывает некоторое вращение в системе A. Вы хотите найти кватернион r, который описывает то же самое вращение в системе B.

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

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

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

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

По сравнению с вышеизложенным действительная часть не изменяется (поскольку cos (x) = cos (-x)), но мнимые части изменяют свой знак, в дополнение к изменению порядка. Обобщая из этого, кватернион a + bi + cj + dk описание вращения в старой системе координат будет превращено в a - bi - dj - ck в новой системе координат.

Другие вопросы по тегам