【发布时间】:2015-01-15 19:28:30
【问题描述】:
我有一个由节点和元素定义的二维网格。
节点结构:节点ID、X位置、Y位置
元素的结构:元素ID、节点1、节点2、节点3、节点4
2x2 元素网格示例:
Nodes:
ID X Y
1 0 0
2 0 1
3 0 2
4 1 0
5 1 1
6 1 2
7 2 0
8 2 1
9 2 2
Elements:
ID N1 N2 N3 N4
1 1 2 4 5
2 2 3 5 6
3 4 5 7 8
4 5 6 8 9
N7-----N8-----N9
| | |
| E3 | E4 |
| | |
N4-----N5-----N6
| | |
| E1 | E2 |
| | |
N1-----N2-----N3
我将节点和元素都存储在链表中。
我的问题:如何找到任意选定节点的邻居(节点)?
例如,N5 的邻居是 N2、N4、N6 和 N8。
*注意:这个用于解释的 2x2 元素网格简化示例建议,我正在处理的网格可能包含数千个节点和元素。 我也一直在研究图论的一些概念,但我不确定哪个可能是正确的方法。
【问题讨论】:
-
所有顶点都在一个平面(xy平面)吗?而且,它们是否覆盖了一个区域中的所有整数点?还是稀疏?
-
@TravisJ 是的,它们仅限于 xy 平面。并且顶点可能是稀疏的。
-
当且仅当它们直接位于彼此的上方/下方/右侧/左侧时,它们是邻居吗? (之间没有其他节点)例如,如果图只有两个顶点,一个在 (0, 0),一个在 (1, 1),它们会相邻吗?另外,你知道你的图是连通的吗?
-
@TravisJ 这就是为什么我称它为网格而不是图形的原因,让我解释一下。我首先定义了一组点/节点/顶点,这些节点可以位于 xy 平面上的任何位置。然后我根据之前定义的节点定义元素。在我的例子中,一个元素定义有 4 个节点(任何 4 个节点)。如果两个节点共享一个元素的相同边,则两个节点是连接的,并且两个元素是连接的,它们至少共享一个节点。请注意,此时我没有“边缘列表”,只有节点和元素。
-
所以你试图决定哪些元素(E1,E2,...)连接到哪些元素?如果是这样,您正在寻找的图形术语是平面图的对偶。网格图是平面图......图的面是你的元素。在图的对偶中,面成为顶点(元素是顶点),当对应的面共享一条边时,顶点是相连的。
标签: c++ graph nodes elements mesh