对多边形的布尔运算

Boolean Operations On polygons

本文关键字:布尔运算 多边形      更新时间:2023-09-26

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

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

我找到了优秀的Javascript库http://sourceforge.net/projects/jsclipper/来做这件事,但是我不知道如何正确使用它。

例如,如果我想找到两个多边形的异或,这两个多边形代表半径为1和2的圆(一个多边形在另一个多边形内,所以我想找到一个圆圈外和另一个圆圈内的区域),如何使用它

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

首先,JSClipper (Clipper的Java翻译)只接受多边形作为整型坐标的平坦路径。因此,您需要将圆半径按适当的因子(取决于所需的精度)进行缩放,并使用PointsOnEllipse算法生成平坦的路径。

然后,假设一个圆位于另一个圆的内部,并且这个内圆代表外部圆形多边形的一个"孔",那么它的方向将需要与外部多边形相反(如这里所解释的)。

JSClipper的布尔运算的解决方案将保持为平坦的路径,尽管您指定的路径上的异或操作的解决方案将是这些完全相同的路径(即不变),因为这两条路径仍然表示返回的多边形区域的外部和内部轮廓。

一旦任何布尔运算完成,您需要反转任何初始多边形缩放以获得代表平坦路径的浮点坐标。

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