поверните 3d тело в соответствии с нормой в Matlab - PullRequest
3 голосов
/ 27 июня 2011

У меня есть 3d тело (треугольная сетка) и поверхность, нормальная к одной из граней. Я хочу повернуть тело так, чтобы ось Z была параллельна нормали. Как найти матрицу вращения?

Ответы [ 2 ]

3 голосов
/ 27 июня 2011

Если вы привязываете тело к объекту hgtransform, вы можете использовать команду makehgtform для создания матрицы преобразования для этого объекта. Самый простой способ - использовать эту форму makehgtform:

h = hgtransform;
m = makehgtform('axisrotate', [ax ay az], r);
set(h, 'Matrix', m);

Опция axisrotate позволяет вращаться вокруг произвольной оси. В этом случае [ax ay az] - это вектор, который является нормалью к плоскости, в которой вы хотите повернуть. Это плоскость, которая проходит через два вектора, между которыми вы пытаетесь вращаться. Таким образом, вы используете перекрестное произведение оси Z и нормали. Это дает вам вектор, который является нормальным для обоих ваших векторов, и который определяет ориентацию плоскости, которая проходит через оба из них.

Теперь вам нужно выяснить угол поворота. Значение r - это угол, который вы хотите повернуть вокруг этой оси в радианах. Есть несколько способов получить это. Проще всего, если ваши два вектора нормализованы. Тогда величина перекрестного произведения равна греху угла, а величина точечного произведения равна cos угла. Имеет ли это смысл?

1 голос
/ 27 июня 2011

Вы можете легко реализовать это самостоятельно. Матрицу для общих вращений можно найти в википедии . Вам просто нужно знать функции cos () и sin () для углов. Если ваш нормальный вектор поверхности n является вектором единичной длины (т. Е. | n | = 1), то вы уже знаете соответствующий cos ().

    |  cos(angle between normal and x-axis)  |
n = |  cos(angle between normal and y-axis)  |
    |  cos(angle between normal and z-axis)  |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...