哪个JavaScript库可以使用贝塞尔曲线进行布尔运算?

phi*_*ipp 12 javascript svg bezier boolean-operations html5-canvas

是否存在可以对路径执行布尔运算的Javascript库(贝塞尔曲线)?

我知道Paper.js和Raphael.js,但现在都无法执行这些操作.

Jür*_*hni 6

Paper.js现在在其核心中有布尔运算:

https://github.com/paperjs/paper.js/blob/master/src/path/PathItem.Boolean.js

在这里,您可以看到操作中的操作:

http://assets.paperjs.org/boolean/

  • @IanTerrell 从那以后我们已经改进了布尔运算很多。但是,如果您遇到错误,最好能够报告它们,以便我们可以修复它们。 (2认同)

Tim*_*nen 5

如果您将路径转换为多边形(例如,使用 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% 无错误。它的理想用例是例如。使用生成的多边形进行布尔运算的可能性。