Из этого ответа;https://stackoverflow.com/a/34060479/1493455 Я сделал некоторый код, который должен вращать точку вокруг начальной точки. Начало координат в 0,0,0.
Вместо того, чтобы мои вращения были yaw
pitch
roll
, у меня есть xrot
yrot
и zrot
, которые являются градусами (0-360). Вращение вокруг оси X приводит к наклону объекта вперед и назад, а вращение вокруг оси Z приводит к тому, что он вращается так, как если бы это был рывок объекта.
Я думаю, что где-то запутался в переводезначения, но я не могу понять, почему.
При повороте точек вокруг каждого отдельного угла (удерживая остальные 2 на 0 градусов) каждое вращение дает правильное решение.
Комбинированныйрезультаты хороши при вращении вокруг X и Z или Y и Z. Результаты не верны при вращении вокруг X и Y.
var cosa = cos(-degtorad(zrot));
var sina = sin(-degtorad(zrot));
var cosb = cos(-degtorad(yrot));
var sinb = sin(-degtorad(yrot));
var cosc = cos(-degtorad(xrot));
var sinc = sin(-degtorad(xrot));
var Axx = cosa*cosb;
var Axy = cosa*sinb*sinc - sina*cosc;
var Axz = cosa*sinb*cosc + sina*sinc;
var Ayx = sina*cosb;
var Ayy = sina*sinb*sinc + cosa*cosc;
var Ayz = sina*sinb*cosc - cosa*sinc;
var Azx = -sinb;
var Azy = cosb*sinc;
var Azz = cosb*cosc;
var px = Axx*x + Axy*y + Axz*z;
var py = Ayx*x + Ayy*y + Ayz*z;
var pz = Azx*x + Azy*y + Azz*z;
degtorad
в основном return input * pi / 180
Я чувствую, что есть проблема с порядком расчета - поскольку отдельные вращения дают правильный результат, просто комбинация этих трех не дает.
Я знаю это, потому что я вращаю трехмерную модельиспользуя значения zrot, yrot и xrot и рисуя точку в одном и том же трехмерном пространстве - точки в большинстве случаев совпадают с моделью, но не с поворотами по X и Y или X, Y и Z.
ВИДЕО РЕЗУЛЬТАТА: https://streamable.com/481ly (по углам шкафа есть 2 точки, которые рассчитываются по этому коду)