WPF 3D: Как преобразовать один AxisAngleRotation3D в отдельный AxisAngleRotation3D? - PullRequest
3 голосов
/ 22 сентября 2010

У меня есть трехмерный видовой экран, который использует TrackBall 3D-инструмента WPF для вращения объекта с помощью мыши. В результате я получаю один AxisAngleRotation3D с вектором оси, таким как (0,5, 0,2, 0,6) и углом, например, 35. Хорошо.

В качестве альтернативы я хотел бы дать пользователю возможность вращать объект по отдельной оси (то есть x, y, z). Итак, если объект вращается вокруг оси (0,5, 0,2, 0,6) на 35 градусов, как я могу преобразовать это в три поворота вокруг каждой оси, т.е. Xangle для вектора (1, 0, 0), Yangle для вектора (0, 1, 0) и Zangle для вектора (0, 0, 1).

Мне также нужен способ конвертировать их обратно в один объект AxisAngleRotation3D.

EDIT

Я нашел кое-что в http://www.gamedev.net/reference/articles/article1095.asp. Одна вещь, которую я узнал, это то, что я могу легко получить (комбинированный) кватернион из отдельного AxisAngleRotation3D. Например,

        private AxisAngleRotation3D _axisX = new AxisAngleRotation3D();
        private AxisAngleRotation3D _axisY = new AxisAngleRotation3D();
        private AxisAngleRotation3D _axisZ = new AxisAngleRotation3D();
...
            _axisX.Axis = new Vector3D(1, 0, 0);
            _axisY.Axis = new Vector3D(0, 1, 0);
            _axisZ.Axis = new Vector3D(0, 0, 1); 
...
            Quaternion qx = new Quaternion(_axisX.Axis, _axisX.Angle);
            Quaternion qy = new Quaternion(_axisY.Axis, _axisY.Angle);
            Quaternion qz = new Quaternion(_axisZ.Axis, _axisZ.Angle);
            Quaternion q = qx * qy * qz;

Это хорошо. Теперь проблема в том, как я могу сделать обратное? Итак, для данного q, как я могу узнать qx, qy, qz?

Ответы [ 2 ]

1 голос
/ 17 декабря 2010

угол в углах Эйлера

0 голосов
/ 22 сентября 2010

Вы можете преобразовать его в матрицу и затем вернуться к трем отдельным представлениям поворотов.Вы можете найти формулы для обоих преобразований в сети.Вы также можете оптимизировать его, записав его и решив уравнения на бумаге, что приведет к, возможно, более быстрой формуле.

Однако я предлагаю никогда не представлять вращение в трех числах, это связано с особенностями, обусловленными этой реализацией, и числовой нестабильностью.,Вместо этого используйте кватернионы.

...