我有 3d 体(三角形网格)和一个垂直于其中一个面的表面。我想旋转 body ,使 Z 轴平行于法线。如何找到旋转矩阵?
最佳答案
如果将主体作为 hgtransform 对象的父级,则可以使用 makehgtform 命令为该对象创建变换矩阵。最简单的方法是使用这种形式的 makehgtform:
h = hgtransform;
m = makehgtform('axisrotate', [ax ay az], r);
set(h, 'Matrix', m);
axisrotate 选项可让您围绕任意轴旋转。在这种情况下,[ax ay az] 是一个垂直于您要在其中旋转的平面的矢量。这是穿过您试图在其间旋转的两个矢量的平面。所以你使用 Z 轴和法线的叉积。这为您提供了一个垂直于两个向量的向量,并定义了通过这两个向量的平面的方向。
现在您需要计算出旋转角度。值 r 是您想要围绕该轴旋转的角度(以弧度为单位)。有几种方法可以做到这一点。如果你的两个向量被归一化,这是最简单的。那么叉积的大小等于角度的sin,点积的大小等于角度的cos。这有意义吗?
关于matlab - 根据matlab中的法线旋转3d body ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492422/