如何剪裁现有的3D表面网格以使用对称性。

3
我目前正在解决一个结构力学问题,需要剪切现有的3D表面网格以便在MATLAB或GMSH中使用对称性。
第一次尝试:通过首先删除负x轴上的所有节点来获得对称性;然后使用delaunayTri()获取3D四面体网格。之后,我使用freeboundry() matlab函数获取表面网格。使用这种方法,一些节点被忽略了,因此我失去了实际的几何形状(即3D的双凹形状)和对称性。
第二次尝试:通过首先删除负x轴上的所有节点来获得对称性;然后使用文件交换中的AlphaHull() matlab函数,该函数使用alpha shape算法。在这里,我必须定义一个标量参数称为alpha半径,其值影响表面网格的质量,但没有明确定义的范围,因此我无法自动化更大的网格;更重要的是,在生成的3D表面网格中存在一些残留的表面或四面体网格。
附上三个文件(在一个zip文件中):
  1. 原始GMSH文件;
  2. 从GMSH文件中提取的节点坐标;
  3. 从GMSH文件中提取的元素连接数组(txt格式)。

https://www.dropbox.com/s/7xwkyvqy13k5o33/get_symmetry.zip?dl=0

注意:我不想在新对称性中添加额外的节点,因为当前节点坐标和连接在我的计算中非常重要,但如果必要,可以引入额外的节点。然而,我会感激任何帮助和/或建议。
提前致谢。 所需对称性

1
你需要引入其他的点来剪切这个网格,因为你不仅要沿着边线剪切,还要穿过面... - knedlsepp
@knedlsepp,谢谢,我和你的想法一致!允许引入其他观点! - Adesola Ademiloye
尊敬的同事们,我仍在等待您的友好意见和帮助,请。 - Adesola Ademiloye
这可能需要相当多的手工工作... 在fileexchange上查找网格面交点 - knedlsepp
1个回答

2
您可以使用以下伪算法首先定义网格和平面之间的交点:
  1. 为您的网格定义边缘矩阵(例如,一行由构成边缘的节点索引组成)
  2. 计算网格每个节点与平面之间的有符号距离
  3. 找到具有一个正距离和一个负距离的边缘
  4. 计算边缘和平面之间的交点以创建新节点
  5. 查找具有相交边的三角形并分割三角形(在一般情况下,您需要创建三个三角形)
  6. 删除所有节点不在平面正确侧的三角形
我认为您可以在stackoverflow上找到每个步骤的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接