我有一个三维身体(三角网格)和一个面的表面法线。我想旋转这个物体,使得Z轴与法线平行。如何找到旋转矩阵?
我有一个三维身体(三角网格)和一个面的表面法线。我想旋转这个物体,使得Z轴与法线平行。如何找到旋转矩阵?
如果您将body作为一个hgtransform对象的父级对象,那么您可以使用makehgtform命令为该对象创建一个变换矩阵。最简单的方法是使用以下形式的makehgtform:
h = hgtransform;
m = makehgtform('axisrotate', [ax ay az], r);
set(h, 'Matrix', m);
您可以轻松地自行实现它。一般旋转的矩阵可以在维基百科上找到。您只需要知道角度的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) |