【发布时间】:2018-05-29 02:06:04
【问题描述】:
我的程序有一个 List<Vector3> 的唯一点(A、B、C、...),每次用户绘制唯一的线(1、2、3、...)时都会创建这些点。行存储在List<int> 中,其中每两个整数是每个点的索引以形成单行。两条线不能有相同的两个点,任何点不能占据相同的位置,允许有杂散线。
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)。
这里我唯一的问题是多边形的边越多,我需要进行指数级更多的检查(多边形上每两个额外的边都会导致我在所有连接边上检查一层更深的层)。
有没有办法减少关闭多边形所需的检查次数?
与Cycles in an Undirected Graph 不完全相同。这知道至少存在一个循环并连接到给定的一侧,并且只寻找可能连接到该侧的最小循环。其他方面无关紧要,应该避免。
【问题讨论】:
-
在 A 和 C 之间画一条边会发生什么?它应该创建一个与四边形相邻的三角形还是一个忽略边 2 的较大多边形?多边形可以重叠吗?
-
应该创建第二个多边形(A,B,C),规则与第一个多边形(C,B,D,E)相同
-
Cycles in an Undirected Graph 的可能重复项,因为应该注意您的列表是无向图,而多边形是该图中的循环或循环。
-
不完全是。这知道至少存在一个循环并连接到给定的一侧,并且只寻找可能的最小循环。