如何找到给定顶点的所有多边形形状?

时间:2019-06-07 19:53:31

标签: algorithm math geometry polygon planar-graph

我有一个顶点列表,我知道它们之间的连接。我试图找到所有顶点的多边形形状。这些多边形不应重叠。

我做了一些研究,我认为,如果我可以顺时针(或逆时针方向)移动顶点,则可以检测出多边形。 因此,我搜索了顺时针遍历顶点的解决方案。我找到了similar topic,然后尝试了建议的解决方案。但是问题是遍历顶点时,当有多个顺时针选项时,我无法决定选择哪个路径。

基本上,我想找到以下多边形:

* A, E, G, C, D, A
* E, F, G,  E 
* E, B, F, E

当我从A开始到E顶点时,如何决定选择G路径?

P.S:如果我的方法不适合该问题,或者对此有更好/更简便的解决方案,我愿意采用与我不同的方法

SampleImg

1 个答案:

答案 0 :(得分:1)

根据您的示例,您尝试查找平面图的,该面由其顶点和边定义。

第1步。用一对有向边(弧)替换每个无向边,并在两个方向上连接顶点。对于每个弧(v1-> v2),找到一个下一个弧(v2-> v3),以使这两个弧都在它们的左侧可以通过计算弧与轴之间的角度(例如OX)并按顺时针(或逆时针)顺序对其进行排序来完成。将所有弧标记为“未使用”。

第2步。拾取任何“未使用”的弧,然后一个接一个地跟随下一个弧,直到到达初始弧的原点为止-您将获得一个循环,将一个面定界。您已经找到了一张带有所有圆弧/顶点的新面孔。将该循环中的所有弧标记为“已使用”。重复直到没有“未使用的”弧。

回到您的示例-您将具有以下弧形:

A -> E, E -> A
A -> D, D -> A
B -> E, E -> B
B -> F, F -> B
C -> D, D -> C
C -> G, G -> C
E -> F, F -> E
E -> G, G -> E
F -> G, G -> F

下一个弧的示例:

  • (D-> C)是(A-> D)的下一条弧线
  • (C-> G)是(D-> C)的下一条弧线
  • (G-> E)是(C-> G)的下一条弧线
  • 依此类推...

此算法将查找您的所有内部面孔以及一个外部面孔,并以循环为界(A-> E,E-> B,B-> F,F-> G,G- > C,C-> D,D-> A)。您可以忽略该外表面,但是在某些情况下它可能很有用-例如,当给定点并且您需要找到其相对于整个图形的位置时。