确定多边形何时被新边关闭

时间:2018-05-28 15:14:57

标签: c# unity3d

我的程序有List<Vector3>个唯一点(A,B,C,...),每次用户绘制一条唯一线(1,2,3,...)时都会创建这些点。行存储在List<int>中,其中每两个整数是每个点的索引,以形成一条线。没有两条线可以具有相同的两个点,没有点可以占据相同的位置,并且允许杂散线。

Diagram Diagram

Points: {A, B, C, D, E} //Each letter represents a 2d or 3d position
Sides: {0,1,1,2,1,3,3,4,4,2} //(Each int is an index in Points, every pair is a side)

我试图找到一种有效的方法来确定新线(绿色,5)何时关闭具有任意数量边的多边形。我有办法做到这一点:迭代连接到新行(以及所有后续行)每一行的每一行,直到它们共享一个点(D)。

Completed Polygon Completed Polygon

我唯一的问题是多边形越多,我需要做更多的检查(多边形上每两个额外的边使我检查所有连接边上的一层更深)。

有没有办法减少为了关闭多边形而需要做的检查次数?

Cycles in an Undirected Graph不完全相同。这知道至少存在一个循环并连接到给定侧,并且仅查找可能连接到该侧的最小循环。其他方面无关紧要,应避免使用它们。

1 个答案:

答案 0 :(得分:1)

这一切都取决于您需要的优化级别。对于简单的图片(有些像&lt; 10 - 100k行),你每次都可以运行BFS。

高级算法:

首先,您需要使用Graph representation之一来存储图表。然后,每当用户绘制一条线时,您可以选择两个点中的任意一个并在该点上执行BFS

如果你可以与你的BFS达到相同的点,并且路径长度是> 2然后你有一个多边形。

因为图表是双向的,所以你需要在走过它时要小心。不要重新访问您已访问过的节点。