【问题标题】:Finding Faces in a Geometric Directed Graph在几何有向图中查找人脸
【发布时间】:2014-07-31 12:41:58
【问题描述】:

我在处理有向几何图时遇到了一个相当不寻常的问题。想象一下图表是国家的边界​​。我正在寻找一种方法来找到这些面孔。我的图由可能形成循环(但不一定)的有向边组成。

我要找的是每条边的左右面以及左右面的前任和后继。

每个面都应该逆时针构造,这意味着边的左面总是在里面,而右面在特定面的外面。

在一天结束时,面的节点是地理坐标(纬度和经度)。

这是我正在寻找的信息(从 LeftFace.. 开始)

+------+-------+-------+----------+-----------+---------------------+--------------------+
| Edge | NodeA | NodeB | LeftFace | RightFace | PredecessorLeftFace | SuccessorRightFace | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E1   | P1    | P2    | A        | C         | E5                  | E2                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E2   | P2    | P3    | A        | C         | E1                  | E6                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E3   | P3    | P4    | A        | B         | E2                  | E8                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E4   | P4    | P5    | A        | C         | E3                  | E5                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E5   | P5    | P1    | A        | C         | E4                  | E1                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E6   | P3    | P6    | B        | C         | E3                  | E7                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E7   | P6    | P7    | B        | C         | E6                  | E8                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+
| E8   | P7    | P4    | B        | C         | E7                  | E4                 | 
+------+-------+-------+----------+-----------+---------------------+--------------------+

【问题讨论】:

  • 对于每个有向边,还要在图中添加对边。然后,对于每个(有向的)边,在该方向上找到面。这意味着,遍历面边,以便在每个顶点中选择最左边的相邻边,直到路径返回到起始顶点。要选择最左边的边,需要顶点的 2D 位置。
  • 嗨安特,感谢您回复我。我想我明白了。但是你能不能给我一个小例子来说明你所说的最左边缘是什么意思?
  • 从 P3 到 P4(E3 的对面)。在 P4 中,有两种可能继续路径,P5 和 P7。现在检查边缘左侧的角度。 P3-P4-P5 约为 90 度,P3-P4-P7 约为 270 度。角度 P3-P4-P5 小于 P3-P4-P7,因此路径中的下一条边是 E4,路径中的下一点是 P5。
  • 非常感谢,安特。如果你写一个,我会接受你的回答:-)

标签: graph theory


【解决方案1】:

对于每个有向边,还要在图中添加对边。然后,对于每个(有向)边,在该方向上找到面。这意味着,遍历面边,以便在每个顶点中选择最左边的相邻边,直到路径返回到起始顶点。要选择最左边的边,需要顶点的 2D 位置。

选择最左边缘的示例:从 P3 到 P4(E3 的对面)。在 P4 中,有两种可能继续路径,P5 和 P7。现在检查边缘左侧的角度。 P3-P4-P5 约为 90 度,P3-P4-P7 约为 270 度。角度 P3-P4-P5 小于 P3-P4-P7,因此路径中的下一条边为 E4,路径中的下一点为 P5。

算法:

For each directed edge add opposite edge
While there are edges in graph
  Choose one directed edge
  Find edges that enclose face (on left side) starting from that edge
  Add face to list of faces
  Remove face edges from graph

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 2016-10-19
    • 2012-07-18
    • 2019-07-11
    • 1970-01-01
    • 2019-02-27
    • 2020-05-07
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多