我有一个顶点列表,我知道它们之间的连接。我试图找到所有顶点的多边形形状。这些多边形不应重叠。
我做了一些研究,我认为,如果我可以顺时针(或逆时针方向)移动顶点,则可以检测出多边形。 因此,我搜索了顺时针遍历顶点的解决方案。我找到了similar topic,然后尝试了建议的解决方案。但是问题是遍历顶点时,当有多个顺时针选项时,我无法决定选择哪个路径。
基本上,我想找到以下多边形:
* A, E, G, C, D, A
* E, F, G, E
* E, B, F, E
当我从A开始到E顶点时,如何决定选择G路径?
P.S:如果我的方法不适合该问题,或者对此有更好/更简便的解决方案,我愿意采用与我不同的方法
答案 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
下一个弧的示例:
此算法将查找您的所有内部面孔以及一个外部面孔,并以循环为界(A-> E,E-> B,B-> F,F-> G,G- > C,C-> D,D-> A)。您可以忽略该外表面,但是在某些情况下它可能很有用-例如,当给定点并且您需要找到其相对于整个图形的位置时。