【发布时间】:2014-07-14 23:17:30
【问题描述】:
正如this 所示,您可以使用它来过滤 delaunay 三角剖分并获得完美的限制。
谁能解释一下magik算法?
【问题讨论】:
-
来源可能是一个很好的起点。
标签: javascript d3.js convex-hull delaunay
正如this 所示,您可以使用它来过滤 delaunay 三角剖分并获得完美的限制。
谁能解释一下magik算法?
【问题讨论】:
标签: javascript d3.js convex-hull 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 的任何三角形,其中依次生成上图中的第三张图片。
希望这会有所帮助。
【讨论】:
Alpha 形状是指您从 delaunay 三角剖分中移除任何超过 alpha 的边。您可以使用线条或圆盘直观地显示 alpha,但目标是找到一个凹壳。阅读这里找到凹形船体:Calculate bounding polygon of alpha shape from the Delaunay triangulation。
【讨论】: