Страницы

Поиск по вопросам

понедельник, 11 февраля 2019 г.

Как повернуть точку в пространстве на кватернион?

Есть точка в пространстве описанная 3мя числами: x,y,z
Есть угол поворота описанный кватернионом W,X,Y,Z
Нужно повернуть точку вокруг центра координат (0,0,0) и получить ее новые координаты.
Каким образом это вообще можно делать?
например, если точка имеет положение 0,10,0 , а кватернион описывает поворот вокруг Z оси на 180 градусов, на выходе должно получится 0,-10,0


Ответ

Попробовал матрицу поворота из комментария:

получилось вот что:
function rotate_direction_by_q(a,b){
var w=b[3]; var x=b[0]; var y=b[1]; var z=b[2]; var out=[];
out[0] = a[0] * (1 - 2*y*y - 2*z*z) + a[1] * (2*x*y - 2*z*w) + a[2] * (2*x*z + 2*y*w) ; out[1] = a[0] * (2*x*y + 2*z*w) + a[1] * (1 - 2*x*x - 2*z*z) + a[2] * (2*y*z - 2*x*w) ; out[2] = a[0] * (2*x*z - 2*y*w) + a[1] * (2*y*z + 2*x*w) + a[2] * (1 - 2*x*x - 2*y*y) ;
return out; }
Кватернион я беру из движка Blend4web. Там почему-то W идет в конце, поэтому w=b[3] a не w=b[0]
Тестируем поворот на 90 градусов:
кватернион (с неправильным w): [0, 0, 0.7071099877357483, 0.7071099877357483] координаты: [0,10,0] результат: [-10.000090695113002, -0.00009069511300197064, 0]
Работает!

Комментариев нет:

Отправить комментарий