多边形的布尔运算

Posted

技术标签:

【中文标题】多边形的布尔运算【英文标题】:Boolean Operations On polygons 【发布时间】:2014-08-05 13:43:36 【问题描述】:

我目前正在实施绘图软件,它可以绘制不等式(或不等式系统),例如 f(x,y)

我找到了等值线 f(x,y)=g(x,y) 的近似多边形,但现在我遇到了寻找近似区域的多边形的问题。

我为此找到了出色的 javascript 库 http://sourceforge.net/projects/jsclipper/,但是我不知道如何正确使用它。

例如,如果我想找到两个多边形的异或,它们代表半径为 1 和 2 的圆(一个多边形位于另一个多边形内,所以我想找到一个圆外和另一个圆内的区域)。

【问题讨论】:

【参考方案1】:

例如,如果我想找到两个多边形的异或,代表半径为 1 和 2 的圆(一个多边形位于另一个多边形内,所以我想找到一个圆外和另一个圆内的区域)

首先,JSClipper(Clipper 的 Java 翻译)只接受多边形作为具有整数坐标的扁平路径。因此,您需要将圆半径放大一个合适的因子(取决于所需的精度)并使用PointsOnEllipse 算法生成扁平路径。

然后,假设一个圆位于另一个圆内,并且这个内圆代表外部圆形多边形的“洞”,那么它的方向将需要与外部多边形相反(如 here 所述)。

JSClipper 布尔运算的解决方案将保留为扁平路径,尽管对您指定的路径进行 XOR 运算的解决方案将是这些完全相同的路径(即未更改),因为这两条路径仍将代表外部和内部轮廓返回的多边形区域。

完成任何布尔运算后,您需要反转任何初始多边形缩放以得出表示您的展平路径的浮点坐标。

最后,没有简单的方法可以从扁平路径重建圆形/椭圆半径和原点等。

【讨论】:

以上是关于多边形的布尔运算的主要内容,如果未能解决你的问题,请参考以下文章

合并许多凸多边形的快速算法或库

OpenCV中的四边形运算(一)——最小外接矩形

Hzoi 2018.2.11多边形 区间DP

如何获得多边形的隐藏状态

多边形游戏(DP)

Vijos 1565 多边形 区间DP