为什么 d3.voronoi.triangles 的 return 值少了一个三角形?

Why is there a triangle missing from the return value of d3.voronoi.triangles?

在使用 triangles() 生成用于对某些点进行插值的网格时发现了这一点。注意到我的一些点不在任何三角形内。我惊讶地发现网格中缺少一个三角形。将我的数据修剪到 4 个顶点,这应该产生 2 个三角形,但只产生 1 个。我尝试稍微调整顶点,这会产生预期的三角形数量。

v = require("d3-voronoi").voronoi();

vertices = [[47.307,105.33],[51.707,104.13],[52.717,110.74],[53.917,106.34]];

console.log(v.triangles(vertices)); // returns 1 triangle

vertices[3][1] += 0.001 // tweak one of the values slightly

console.log(v.triangles(vertices)); // returns 2 triangles (as expected)

https://tonicdev.com/56f99ca738ca281100ea16ad/573f3672a04fd4110009ee44

因为我不熟悉所使用的算法,所以我没有太多运气通过 d3-voronoi(比较失败路径与成功案例)。

我怀疑是数字错误,但我不确定如何追踪或解决此问题。

寻求帮助解决 d3-voronoi 中的问题(理想情况下),或推荐其他(数值稳定的)网格生成函数。

我最终绕回了这个问题,并在 d3-voronoi 回购中发布了 issue

答案很快就回来了,同圆点,简单来说就是voronoi算法的问题。

我的选择是向我的数据添加一些随机抖动或直接计算三角形。如前所述,我选择了后者使用 delaunay-triangulate