我想导入非结构化的2d / 3d网格,如下所示:
或者
进入我的模拟。
我认为非结构化网格用顶点列表和边缘列表(即哪些顶点连接到哪些顶点)来描述。我不知道如何从中获得能够索引网格中的子体积。
然后我想在网格上运行模拟。为了做到这一点,我需要能够:
1)索引网格 2)生成邻居列表
我如何做到这一点?
答案 0 :(得分:1)
对于顶点和边,您有一个无向图。有不同的数据结构用于表示图形和用于遍历它们的不同算法。它并不像遍历图表那么简单,因为你需要数量。
如果您有两个列表,那就太好了:
类似的东西:
列出1
0.4 0.7 0.8
0.4 0.8 0.9
0.6 0.8 0.9
0.7 0.7 0.8
....
列表2
1 2 3
4 2 3
....
(假设卷是四面体。如果它们是四边形或棱柱,则必须指出哪些顶点由边连接。)
如果是这种情况,您只需将第二个列表编入索引。
如果你只有顶点(坐标向量)和边(顶点索引对),那么你必须弄清楚如何将边转换成体积。
边缘的坐标向量列表和边缘的整数索引对(到第一个列表)可能是存储顶点的最有效方法,但您可能需要使用不同的数据结构来提高效率,例如列表顶点的坐标向量和作为边的稀疏矩阵存储的邻接矩阵。矩阵中的每个元素表示是否存在一对顶点的边(1是,0否)。行号是一个顶点的索引,列号是另一个顶点的索引。 (这是一个对称矩阵。)
您可以通过找到三个顶点(1,2,3)从顶点(0)开始形成一个四面体,每个顶点与0共享一个边,另外两个顶点,但是您不希望包含相交的四面体所以你必须要小心。然后,您可以按顶点索引以升序(或降序)索引四面体,以便每个四面体都具有唯一索引。对于具有更多顶点的卷,您必须提出更复杂的索引方案,例如按升序(或降序)顺序进行索引索引。例如(42,54)将在升序系统中出现(67,89)。因此,一个卷将由这些有序对中的几个组成,其中对按顺序列出,而顶点索引按顺序排列。