使用JavaScript在点周围创建凸包

时间:2014-03-01 21:32:25

标签: javascript kineticjs convex-hull

我想在使用KineticJS创建的图像周围创建一个外壳。

1 - 我用[x,y]保存图像的所有顶点:

var points = [[0, 0], [0,350], [170, 0], [170, 300], [135, 135] , [135, 435], [305, 135], [305, 435]];

2 - 我想在点周围创建一个凸包

3 - 之后,我想将船体的距离设置得更高,所以所有物体都可以在船体中。

我发现javascript implementation用于在线创建凸包,并尝试在我的KineticJS脚本中绑定它。

但是我收到一个错误: 未捕获RangeError:超出最大调用堆栈大小 在buildConvexHull函数中:

allBaseLines.push(baseLine)

我的代码是小提琴,但它不起作用...... http://jsfiddle.net/gvFrd/5/

2 个答案:

答案 0 :(得分:1)

Hull.js看起来就像你正在寻找的答案。在制作凸包后,它还可以向内推动边缘并生成更多的线段,以获得看起来非常精确的轮廓。

https://www.npmjs.com/package/hull.js

答案 1 :(得分:0)

一个简单的算法是将点集分成2个半集并找到3个最远点并对点进行三角测量。然后三角形内的每个点都在凸包中。然后重复其他点的步骤。搜索快速船体算法。您也可以使用delaunay三角测量。你可以下载我的凸壳类@ phpclasses.org。它使用了delaunay三角剖分。