Как узнать угол поворота 3D на каждой оси? - PullRequest
5 голосов
/ 06 декабря 2010

У меня есть Model3DGroup, которая вращается вокруг любой оси x, y, z с помощью AxisAngleRotation3D, примененного к свойству Transform объекта.

Проблема в том, что я не контролирую различныеповороты применяются на сетке.Мне нужно отобразить угол сетки на каждой из осей x, y, z в каждом цикле рендеринга.

Как я могу это сделать?Я попытался получить объект AxisAngleRotation3D на объекте, но он только дает мне вращение, которое было применено последним.Это не правильно.

Если, например, было применено вращение оси: Vector3D (1, 1, 0) Угол: 45

Фактическое вращение вокруг оси Z не будет равно 0.Как узнать фактический угол на каждой оси?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2012
 double rotationX = Vector3D.AngleBetween(new Vector3D(1, 0, 0), yourMatrix3D.Transform(new Vector3D(1, 0, 0)));
 double rotationY = Vector3D.AngleBetween(new Vector3D(0, 1, 0), yourMatrix3D.Transform(new Vector3D(0, 1, 0)));
 double rotationZ = Vector3D.AngleBetween(new Vector3D(0, 0, 1), yourMatrix3D.Transform(new Vector3D(0, 0, 1)));
1 голос
/ 29 июня 2011

Свойство Model3DGroup.Transform.Value является Matrix3D, представляющим полное преобразование. http://msdn.microsoft.com/en-us/library/system.windows.media.media3d.matrix3d.aspx

Элементы матрицы представляют полное преобразование. Преобразование формы матрицы в углы поворота (углы Эйлера) довольно простое. Смотри например http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToEuler/index.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...