matlab - 根据matlab中的法线旋转3d body

标签 matlab geometry computational-geometry

我有 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/

相关文章:

python - 是否有 Matlab "stem3"的 matplotlib 副本?

MATLAB:不使用现有函数的 10 折交叉验证

matlab - 在 SVM 中处理大型核矩阵

r - R中两个向量之间的角度

matlab - 有上限和下限的cumsum?

c++ - 生成三角形边的代码

math - 如何判断一个点是否在四边形内

algorithm - 给定三角网格顺时针排序点

algorithm - 在 3 维中分段相交

algorithm - 给定n个矩形坐标,求k个矩形相交区域的面积?