在Matlab中使用平面裁剪来裁剪3D网格

时间:2019-07-21 11:58:00

标签: matlab graphics 3d

我已经制作了3D分析代码,我想用2D平面将3D网格拆分或裁剪为2个部分,这是我期望的:我需要的最终结果是找出左侧和右侧的节点是什么,您在下图上看到的是3D对象(凹凸不平)的节点,您知道我需要使用哪种方法或库来解决此问题? my problem 这是我在2D平面上的数据结构: 专栏1:脸部 第2列:X坐标 第3列:Y坐标 第4列:Z坐标 第5栏:有限元值 data structure 。 3D网格的数据结构包含的数据与上表相同,非常感谢!

我们可以知道平面的XYZ坐标,因此我尝试使用<=来查找大于或小于平面坐标的轴值: 查找x,y,z 3D模型坐标小于x,y,z剖切面坐标     [r] =查找((Name_OT(:,1)> = x)&(Name_OT(:,2)> = y)&Name_OT(:,3)> = z);

蓝线是平面,彩色线是我的代码的结果,理想的结果是彩色节点已满,但是这里发生的颜色节点有一个大的洞或间隙

not good result

1 个答案:

答案 0 :(得分:0)

您首先需要确定是否要按(线性)平面分割数据。如果您希望保持曲面弯曲,请按照我之前的评论进行操作并编辑您的问题。

要使平面适合切割的数据,可以使用fit

基于平面,可以获取平面的法线向量。那就是读取fit结果的系数,并且在文档中。使用该法向矢量,您可以旋转所有数据,以使平面垂直于z轴。旋转是矩阵乘法。从那里,您可以使用logical indexing细分数据集。

您还可以获取相对于平面切割的数据点的法线分量,并以此方式确定方向。您仍然需要fit。从这一点来说,这是基本的矩阵操作。在Matlab中,nx1向量可以与1xn向量相乘。因此,也可以通过基本的矩阵操作来构造投影仪。乍一看,这种方法的计算效率很低。