从Mathematica表面网格生成四边形网格

6
我正在尝试从由Mathematica生成的表面网格(主要是三角形)制作四边形网格。我不需要高质量的网格,只需要一个简单的解决方案算法。我使用GMSH来进行外部处理。我们可以利用Mathematica的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个边的多边形组成),并且与商业软件相比可能效率相当低下。但是可以看出,除了少数昂贵的商业软件之外,几乎没有四边形表面网格生成器。

2
你是想要一个完整的网格(六面体/立方体)还是表面网格(四边形)?你想如何处理像这样的三角形:Graphics3D[ GraphicsComplex[{{0, 0, 0.5}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}}, Polygon[{{1, 2, 3}, {3, 4, 1}}]]] - 你可能需要进行法线测试。以及如何处理像http://reference.wolfram.com/mathematica/TetGenLink/tutorial/UsingTetGenLink.html底部所示的相交三角形。 "SpaceShuttle"是密封的...您能否上传使用GMSH完成的“cow”的结果图片? - user1054186
如果您想获取四面体表面,qmorph算法可能是一个基础:pages.cs.wisc.edu/~csverma/CS899_09/qmorph.pdf - user1054186
@belisarius 是的,这是最粗糙的方法之一。正如ruebenko所指出的,qmorph是一个在MMA中需要相当多工作的众所周知的算法。我想要像你说的那样简单的东西。一旦我有了更好的关于奶牛和如何使用GMSH生成四边形网格的例子,我会更新问题。我现在正忙于其他事情,需要一点时间。希望你觉得这个问题很有趣。 - PlatoManiac
我记得曾经用 [IMTEK package] (http://portal.uni-freiburg.de/imteksimulation/downloads/ims) 实现过类似的功能,但那是很久以前了,也有可能我记错了。 - Dr. belisarius
是的,那个项目已经很久以前了。现在看到Mathematica有了TetGenLink,你可以更有效地从IMS做网格处理。@belisrius,总是很高兴听到有些人发现它对某些事情有用。 - user1054186
显示剩余4条评论
1个回答

0

无论输入的拓扑结构如何,这将产生四边形:

  • 在每个面的中心插入一个顶点
  • 在每条边的中点插入一个顶点
  • 插入连接每个面的中心顶点与其边缘中点顶点的边

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