如this所示,您可以使用它来过滤delaunay三角剖分并获得理想的极限。
有人可以解释魔术算法吗?
最佳答案
背景
除了经典的Delaunay triangulation算法外,没有什么魔力,经典的算法在D3中作为函数d3.geom.delaunay()
实现。
在您链接的示例中,alpha shapes被实现为修改的Delaunay三角剖分,其方式是将至少一侧大于alpha
的三角形(在该示例中,其值50
)从三角剖分。
这就是为什么结果看起来像这样的原因:(原始顶点,Delaunay三角剖分和Alpha形状)
细节d3.geom.delaunay()
返回三角形数组,因此此代码:
mesh = d3.geom.delaunay(offset(vertices,600,0)).filter(function(t) {
return dsq(t[0],t[1]) < asq && dsq(t[0],t[2]) < asq && dsq(t[1],t[2]) < asq;
});
加上
asq
是alpha
平方的事实,并且dsq()
是计算平面中两点之间平方距离的函数,会导致删除至少一侧大于alpha
的任何三角形,从而产生上图中的第三张图片。希望这可以帮助。