Не удается применить матрицу вращения к точке с началом координат - PullRequest
0 голосов
/ 21 октября 2019

Из этого ответа;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 точки, которые рассчитываются по этому коду)

...