phi*_*ipp 12 javascript svg bezier boolean-operations html5-canvas
是否存在可以对路径执行布尔运算的Javascript库(贝塞尔曲线)?
我知道Paper.js和Raphael.js,但现在都无法执行这些操作.
Paper.js现在在其核心中有布尔运算:
https://github.com/paperjs/paper.js/blob/master/src/path/PathItem.Boolean.js
在这里,您可以看到操作中的操作:
http://assets.paperjs.org/boolean/
如果您将路径转换为多边形(例如,使用 pathelement.getPointAtLength()),那么您可以使用 Javascript Clipper,它是流行的 Angus Johnson 的 Clipper 库的 javascript 端口。
这是Difference的一个例子,但Union、Intersect和Xor也是可能的:

Javascript Clipper 的页面在这里。
如果 getPointAtLength() 给出太多点数,Javascript Clipper 有一个函数 ClipperLib.Lighten(),可以显着减少点数。
该库还支持多边形偏移。请参阅现场演示。
编辑:测试后我可以确认 pathelement.getPointAtLength() 最适合例如。命中测试,但在这种情况下对多边形化不太好,因为它产生的点太少或太多,并且没有考虑曲率。事实上,紧密的曲线需要更多的点,而松散的曲线则需要更少的点。更好的是将所有路径段转换为三次曲线,并使用一些自适应算法来多边形化曲线。我已经做了一些测试,可能很快就会引入一种更好的多边形化方法。
编辑:我已经设法实现了 SVG 路径多边形化功能,它可以处理所有类型的路径并展平变换。在测试了数千个随机生成的路径和转换之后,它似乎是可靠的。此外,所有可能的退化情况(曲线共线或某些点相同)都可以毫无问题地处理。尽管它已经比原生 getPointAtLength() 快很多倍,而且产生的点数要少得多,但该过程仍有提高速度的空间,例如使用。出租车角度而不是 atan2() 并通过删除所有 DOM 方法使代码与 Web Workers 完全兼容。我想在发布之前使其 100% 无错误。它的理想用例是例如。使用生成的多边形进行布尔运算的可能性。