我正在为2D中的简单多边形上的联合和交集操作寻找算法。
我的应用程序中的每个多边形都是:
我遇到了两种方法。第一种是将交叉点指示为条目或退出的算法。
第二种算法在交叉点处划分边缘,然后为所选操作选择“右”边缘。
我想使用一些算法代替现有的库。
答案 0 :(得分:0)
我建议使用以下方法:对于多边形的每个顶点,如果它位于另一个多边形的内部或外部,则为所有决定。边缘之间的交叉点告诉您“内部”状态发生变化的位置,这允许您划分需要重新组合的两个多边形轮廓的片段(例如,Out(P,Q)和Out(Q,P)是联合的片段,而In(P,Q)和In(Q,P)是交集的片段。
现在要以一点成本获得良好的稳健性,使用一致性原则:沿边缘的交叉点数量必须具有与两个内部点的内部性相容的奇偶校验。例如,当将内部顶点连接到外部顶点时,您必须找到奇数个交叉点。
当您观察到与此规则的偏差时,请修改交叉点数量的奇偶校验。这可以通过丢弃交叉点或复制交叉点来完成。
这项措施不会避免不必要的影响,如非常靠近边缘而不是合并或微观交叉点,但它会避免灾难性的异常。即使内部测试不良或交叉功能不准确,它也能正常工作。