我想在使用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/
答案 0 :(得分:1)
Hull.js看起来就像你正在寻找的答案。在制作凸包后,它还可以向内推动边缘并生成更多的线段,以获得看起来非常精确的轮廓。
答案 1 :(得分:0)
一个简单的算法是将点集分成2个半集并找到3个最远点并对点进行三角测量。然后三角形内的每个点都在凸包中。然后重复其他点的步骤。搜索快速船体算法。您也可以使用delaunay三角测量。你可以下载我的凸壳类@ phpclasses.org。它使用了delaunay三角剖分。