Как вычислить противоположный вид из кватернионного вращения? - PullRequest
4 голосов
/ 02 августа 2011

У меня кватернионное вращение, как обычно описывается 4 значениями: a b c d.Допустим, он трансформирует ось X, поэтому я смотрю на какой-то объект спереди.Теперь я хочу изменить это вращение, поэтому я смотрю на объект сзади.Итак, в основном я хочу изменить точку обзора спереди назад, но сделать это с помощью этого поворота.

Как можно вычислить противоположное вращение?

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Извлеченные из страницы википедии , кажется, что если вы хотите выполнить поворот на 180 ° вокруг оси z , то соответствующий поворот кватерниона будет просто:

0 0 0 1

Ключом здесь является формула enter image description here, где (w, x, y, z) = (a, b, c, d).

Действительно, поскольку cos (90 °) = 0 и sin (90 °) = 1, затем замена альфа на 180 ° и u на (0, 0, 1) дает вам (0, 0, 0, 1).

Редактировать : Как указал Кристиан, направление вверх не обязательно должно быть z , но может быть любым единицей вектором u = (x, y, z) (в противном случае нормализуем его делением на его норму).В этом случае соответствующий поворот кватериона на 180 ° будет

0 x y z

Теперь, чтобы применить это вращение для перемещения вокруг объекта, скажем, у вас есть положение и векторы направления вашей камеры c_pos иc_dir, затем просто (слева) соедините его с помощью q = (0 x y z) и соответственно измените положение камеры.Что-то вроде

c_dir = q * c_dir * q^-1
c_pos = 2 * o_pos - c_pos

, где o_pos - это позиция объекта, а c_dir следует преобразовать в кватернион с 0 вещественными частями.

0 голосов
/ 06 декабря 2012

В моем случае, помогите мне ..

оригинальный кват (x y z w) противоположно ориентированный quat (y -x w -z)

...