【发布时间】:2026-01-30 03:25:01
【问题描述】:
我设置了多边形。在这个集合中,有些是外部多边形,有些可能(或可能不是)是孔。在这个阶段我不知道哪些是多边形孔。我想计算结合所有多边形(包括孔)的最终多边形。
我想到了这个办法:
//'SomeLib' that has polygon boolean fucntions
var polygonSet = [poly1,poly2,...polyn];
var union, intersection;
var combinedPoly = SomeLib.XOR(polygonSet[0], polygonSet[1]);
for( var i=2; i<polygonSet.length ; i++) {
combinedPoly = SomeLib.XOR(combinedPoly, polygonSet[i]);
//or if XOR is not available
union = SomeLib.union(combinedPoly, polygonSet[i]);
intersection = SomeLib.intersection(combinedPoly, polygonSet[i]);
combinedPoly = union - intersection;
}
所以我对模块的要求是
- 只有四个多边形布尔函数
- 如果 npm 模块可用,那就太好了
- 多边形组合的轻量级将是众多功能之一。我的意思是,由于应用程序规模已经更大,所以寻找轻量级库。
- 效率:在我的情况下,集合中的多边形数量可能不高,但多边形中的点数量很多,因此寻找 O(k.log(n)) 而不是 O(k.n)
我遇到的库列表以及我理解的一些要点:
- JSCLipper 高效,没有 npm 模块,github project 是否与 soureforge JSClipper 同步?
- kld-intersections 多边形交集存在但联合不存在(或者我无法找到),具有许多其他功能(多边形布尔值除外)。这是this project 的 javscript 端口
- polygon.js依赖jQuery,效率? ,没有 npm 模块,不要与polygon.js 混淆
- boolean in paper.js paper.js 库的附加组件,不是一个独立的模块
- raphael-boolean raphael lib 的附加组件,不是独立模块
- tess2.js GLU tesselator 移植到 Javascript,包含许多用于 tesselation 的函数 - 多边形布尔函数是否需要 tesselation?我找不到布尔函数,没有文档,测试 html 页面上有一些错误,没有 npm 模块
- turf-donuts 依赖另一个大库 JSTS
- JSTS Topology Suite 大库不是模块化的
在某些情况下,这些函数是大型库的一部分,它们被其他函数重载,或者库与 SVG 或地理空间环境一起工作,或者许多被添加到现有库中。
请根据我的要求建议哪个库是合适的?还有更多用于多边形布尔函数的 javscript 模块化库吗?
【问题讨论】:
标签: javascript svg geometry polygon intersection