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;
});


加上asqalpha平方的事实,并且dsq()是计算平面中两点之间平方距离的函数,会导致删除至少一侧大于alpha的任何三角形,从而产生上图中的第三张图片。

希望这可以帮助。

09-11 17:36