#математика #любой_язык #геометрия
Есть точка в пространстве описанная 3мя числами: x,y,z Есть угол поворота описанный кватернионом W,X,Y,Z Нужно повернуть точку вокруг центра координат (0,0,0) и получить ее новые координаты. Каким образом это вообще можно делать? например, если точка имеет положение 0,10,0 , а кватернион описывает поворот вокруг Z оси на 180 градусов, на выходе должно получится 0,-10,0
Ответы
Ответ 1
Попробовал матрицу поворота из комментария: получилось вот что: 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] Работает!
Комментариев нет:
Отправить комментарий