【问题标题】:Can anybody explain alpha filtering for delaunay implementation in D3?任何人都可以解释 D3 中 delaunay 实现的 alpha 过滤吗?
【发布时间】:2014-07-14 23:17:30
【问题描述】:

正如this 所示,您可以使用它来过滤 delaunay 三角剖分并获得完美的限制。

谁能解释一下magik算法?

【问题讨论】:

  • 来源可能是一个很好的起点。

标签: javascript d3.js convex-hull delaunay


【解决方案1】:

背景

除了经典的 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 的任何三角形,其中依次生成上图中的第三张图片。

希望这会有所帮助。

【讨论】:

  • 感谢@VividD。嗯,理论上的解释对我来说非常复杂......另外'50'是一个任意值,不是吗?角度值不是更有意义吗?还是谢谢
  • 答案是对的:d3.geom.delaunay() 返回三角形数组,也体现在术语“delaunay triangulation”中。因此,从三角剖分中删除不需要的东西的最合乎逻辑的方法是删除三角形。 :) @Phpdna
  • 已删除三角形的某些边与仍未删除的三角形共享,因此,是的,图片中会保留一些内容。
  • t[0]、t[1]和t[2]是当前三角形的顶点。
【解决方案2】:

Alpha 形状是指您从 delaunay 三角剖分中移除任何超过 alpha 的边。您可以使用线条或圆盘直观地显示 alpha,但目标是找到一个凹壳。阅读这里找到凹形船体:Calculate bounding polygon of alpha shape from the Delaunay triangulation

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多