Переключить хиральность кватерниона в коде?
У меня есть кватернионные данные, которые я пытаюсь переключить из правого координатного пространства 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
в новой системе координат.