【发布时间】:2014-08-27 07:21:36
【问题描述】:
我正在制作一个地形编辑器,我需要找到一组点的周边多边形。如果我只需要一个凸包,那么速度就没有问题了。要制作一个凹形船体,我必须经过几圈。我发现我可以对这些点进行三角测量,然后丢弃任何边长于已知点之间距离的三角形。
接下来的问题是:使用 JSTS 几何库 (http://github.com/bjornharrtell/jsts) 将三角形(作为迷你多边形)组合成一个大多边形真的很慢。
查看完整代码:http://codepen.io/anon/pen/oCfDh
我有一个数组(多边形),它被合并形成最终的多边形。问题是 552 点(我想支持 15k+),运行大约需要 3500 毫秒。查看 codepen 链接中的控制台以了解您的速度。
var reader = new jsts.io.WKTReader(),
merged = reader.read(polys[0]).union(reader.read(polys[1]));
console.time('jsts mergization');
for(var i = 2; i<polys.length; i++){
try{
merged = merged.union(reader.read(polys[i]));
}catch(err){
console.log('Error triangulating points!');
};
};
console.timeEnd('jsts mergization');
有没有人知道任何更快的方法可以将三角形合并成一个多边形,或者更宽一些并以完全不同的方式从一组点构建一个凹多边形?
【问题讨论】:
-
在 Firefox 中运行大约需要 9269.50 毫秒,并且会冻结整个浏览器 :( 只是稍作修正.. 抱歉,不知道如何解决。
-
既然知道是三角剖分,就不能只索引每个三角形的相邻点,从顶部三角形开始排序遍历边界吗?
标签: javascript optimization polygon convex-polygon