Javascript 有人能解释一下D3中delaunay实现的alpha过滤吗?

Javascript 有人能解释一下D3中delaunay实现的alpha过滤吗?,javascript,d3.js,convex-hull,delaunay,Javascript,D3.js,Convex Hull,Delaunay,如图所示,您可以使用它过滤delaunay三角剖分并获得一个完美的极限 有人能解释一下magik算法吗?背景 除了经典算法之外,没有什么神奇之处,经典算法在d3中实现为函数d3.geom.delaunay() 在链接到的示例中,以修改后的Delaunay三角剖分的方式实现,以便从三角剖分中删除至少有一条边大于alpha(在示例中,其值为50)的任何三角形 这就是结果如下所示的原因:(原始顶点、Delaunay三角剖分和Alpha形状) 细节 d3.geom.delaunay()返回三角形数组,

如图所示,您可以使用它过滤delaunay三角剖分并获得一个完美的极限

有人能解释一下magik算法吗?

背景 除了经典算法之外,没有什么神奇之处,经典算法在d3中实现为函数
d3.geom.delaunay()

在链接到的示例中,以修改后的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;
});
mesh=d3.geom.delaunay(偏移量(顶点,600,0)).filter(函数(t){
返回dsq(t[0],t[1])
再加上
asq
alpha
的平方,以及
dsq()
是计算平面中两点之间平方距离的函数,导致移除至少一侧大于
alpha
的任何三角形,从而产生上图中的第三个图像

希望这能有所帮助。

Background 除了经典算法之外,没有什么神奇之处,经典算法在d3中实现为函数
d3.geom.delaunay()

在链接到的示例中,以修改后的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;
});
mesh=d3.geom.delaunay(偏移量(顶点,600,0)).filter(函数(t){
返回dsq(t[0],t[1])
再加上
asq
alpha
的平方,以及
dsq()
是计算平面中两点之间平方距离的函数,导致移除至少一侧大于
alpha
的任何三角形,从而产生上图中的第三个图像


希望这有帮助。

Alpha形状是指从delaunay三角剖分中删除任何超过Alpha的边。您可以使用线条或磁盘直观地显示alpha,但目标是找到一个凹面外壳。阅读此处查找凹面外壳:。

从delaunay三角剖分中删除任何超过Alpha的边时,即为Alpha形状。您可以使用线条或磁盘直观地显示alpha,但目标是找到一个凹面外壳。请阅读此处查找凹面外壳:。

源代码可能是一个好的起点。源代码可能是一个好的起点。谢谢@livided。嗯,理论上的解释对我来说很复杂,而且。。。此外,“50”是一个任意值,不是吗?它不是更有意义的角度值吗?无论如何,谢谢答案是正确的:d3.geom.delaunay()返回三角形数组,它也反映在术语“delaunay三角剖分”中。因此,从三角剖分中删除不需要的内容的最合乎逻辑的方法是删除三角形。:)@phpDNA删除的三角形的某些边与未删除的三角形共享,因此,是的,图片中仍会保留一些内容。t[0]、t[1]和t[2]是当前三角形的顶点。谢谢@livided。嗯,理论上的解释对我来说很复杂,而且。。。此外,“50”是一个任意值,不是吗?它不是更有意义的角度值吗?无论如何,谢谢答案是正确的:d3.geom.delaunay()返回三角形数组,它也反映在术语“delaunay三角剖分”中。因此,从三角剖分中删除不需要的内容的最合乎逻辑的方法是删除三角形。:)@PHPDNA已删除三角形的某些边与未删除的三角形共享,因此,是的,图片中将保留某些内容。t[0]、t[1]和t[2]是当前三角形的顶点。