d3欺骗voronoi tesselation

时间:2016-01-25 17:26:25

标签: javascript d3.js geometry

我有一组点和线连接一些点。我想通过这些线绘制垂直平分线,找到这些平分线的连接点,形成像voronoi图的图像。

但是,由于没有考虑创建图表的所有点,我决定不使用d3.geom.voronoi()

相反,我编写了代码来自己绘制垂直平分线。但是,我在找到平分器本身相交的位置时遇到问题,以便它们可以停止扩展以形成多边形。

这是目前的样子......

The red lines denote the bisectors

黑线表示点之间的连接,红线表示与它们垂直的平分线。

因为,我的要求非常接近voronoi图,我想知道我是否能以某种方式使用d3.geom.voronoi()来完成它。

1 个答案:

答案 0 :(得分:0)

如果您可以在图表的任何边缘的两侧找到两个三角形,则可以尝试以下伪代码。我已经在完全delaunay三角测量中尝试了它并且它有效。

"purple"

这将为您提供所需的所有边缘,即具有起点和终点。

需要注意的一个案例是边缘是顶点凸包的一部分,在这种情况下,一侧只有一个有限三角形。你可以像现在这样做 - 获得这样一条直线的方向向量 - 垂直向量到原始边缘。

如果您可以访问常用于表示平面镶嵌的几何数据结构之一(半边,翼边,四边等等 - 我不确定d3使用的是什么。),这应该是实现相当简单(在四边形的情况下,这是微不足道的,因为您已经拥有了所需的所有信息)。