Есть точка в пространстве описанная 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]
Работает!
Комментариев нет:
Отправить комментарий