我有一组简单的(没有孔,没有自相交)多边形,我需要检查它们是否相互交叉(一个可以完全包含在另一个中;没关系)。我可以通过简单地检查一个多边形与其他多边形的每个顶点内部来检查这一点。
我还需要确定包含树,它是一组关系,表明哪个多边形包含任何给定的多边形。由于没有多边形可以与任何其他多边形相交,因此任何包含的多边形都有一个唯一的容器;“下一个更大”的。换句话说,如果 A 包含 B 包含 C,则 A 是 B 的父级,B 是 C 的父级,我们不认为 A 是 C 的父级。
问题:如何有效地确定包含关系并检查不相交标准?我将此作为一个问题提出,因为也许组合算法比单独解决每个问题更有效。该算法应该将多边形列表作为输入,由它们的顶点列表给出。它应该生成一个布尔值 B,指示是否没有多边形与任何其他多边形相交,并且如果 B = true,则生成对 (P, C) 对的列表,其中多边形 P 是子 C 的父级。
这不是家庭作业。这是我正在从事的一个爱好项目。