【发布时间】:2012-01-03 05:08:44
【问题描述】:
我正在尝试从 Mathematica 生成的表面网格(主要是三角形)制作四边形网格。我不是在寻找高质量的网格器,而是在寻找一个简单的算法。我使用GMSH 在外部进行。我们可以利用 Mathematic 的 CAD 导入功能来生成 Mathematica 内核可以理解的 3D 几何图形。
我们可以看到导入的Geometry3D 对象以及它们所包含的每个多边形的边数图。可以看出,构成网格的多边形并不总是三角形。
Name3D=RandomChoice[ExampleData["Geometry3D"][[All,2]],6];
AllPic=
Table[
Vertex=ExampleData[{"Geometry3D",Name3D[[i]]},"VertexData"];
Polygons=ExampleData[{"Geometry3D",Name3D[[i]]},"PolygonData"];
GraphicsGrid[
{{ListPlot[#,Frame-> True,PlotLabel->Name3D[[i]] ]&@(Length[#]&/@Polygons),
Graphics3D[GraphicsComplex[Vertex,Polygon[Polygons]],Boxed-> False]}}
,ImageSize-> 300,Spacings-> {0,0}],
{i,1,Length@Name3D}];
GraphicsGrid[Partition[AllPic,2],Spacings-> {0,0}]
现在我正在寻找一种算法,可以根据 MMA 可用的多边形信息形成四边形网格。任何简单的解决方案都非常受欢迎。通过简单的解决方案,我的意思是在非常一般的环境中(其中网格由边数超过 5 或 6 的多边形构成),并且与商业软件相比可能效率很低。但是可以看出,除了一些昂贵的商业网格生成器之外,可用的四边形曲面网格生成器并不多。
BR
【问题讨论】:
-
您在寻找全网格(六面体/砖块)还是表面网格(四边形)?您想如何处理如下所示的三角形: Graphics3D[ GraphicsComplex[{{0, 0, 0.5}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}} , Polygon[{{1, 2, 3}, {3, 4, 1}}]]] - 可能你需要一个正常的测试。以及如何处理reference.wolfram.com/mathematica/TetGenLink/tutorial/… 底部所示的相交三角形。 “航天飞机”是水密的。你能上传一张用 GMSH 完成的结果图片,比如牛吗?
-
如果你想要四边形曲面,qmorph 算法可以作为基础:pages.cs.wisc.edu/~csverma/CS899_09/qmorph.pdf
-
您是否正在考虑解决方案,例如从两个三角形集合中删除共享边?
-
@belisarius 是的,这是最粗暴的方法之一。正如 ruebenko 指出的那样,qmorph 是一种众所周知的算法,需要在 MMA 中进行大量工作。我想要一些简单的东西,就像你说的。一旦我有一个更好的奶牛示例以及如何使用 GMSH 生成四边形网格,我将更新这个问题。我需要一点时间,因为我目前正忙于其他事情。我希望你觉得这个问题很有趣。
-
出于好奇,你打算用网格做什么?
标签: algorithm wolfram-mathematica geometry mesh