Algorithm 最近邻区可视化
我正在编写一个应用程序,它使用一个。在开发过程中,能够“看到”每个点周围最近的区域将是一件好事 在所附图像中,红色点是k-d树中的点,围绕每个点的蓝色线限定了最近邻搜索将返回包含点的区域 图像是这样创建的:Algorithm 最近邻区可视化,algorithm,computational-geometry,data-visualization,kdtree,space-partitioning,Algorithm,Computational Geometry,Data Visualization,Kdtree,Space Partitioning,我正在编写一个应用程序,它使用一个。在开发过程中,能够“看到”每个点周围最近的区域将是一件好事 在所附图像中,红色点是k-d树中的点,围绕每个点的蓝色线限定了最近邻搜索将返回包含点的区域 图像是这样创建的: for each point in the space: da = distance to nearest neighbor db = distance to second-nearest neighbor if absolute_value(da - db) < 4:
for each point in the space:
da = distance to nearest neighbor
db = distance to second-nearest neighbor
if absolute_value(da - db) < 4:
draw blue pixel
对于空间中的每个点:
da=到最近邻居的距离
db=到第二个最近邻居的距离
如果绝对_值(da-db)<4:
绘制蓝色像素
该算法存在两个问题:
- (更重要的是)在我的(相当快的Core i7)计算机上速度很慢
- (不太重要)它很邋遢,从蓝线的不同宽度可以看出
另一个好的起点(有效计算距离图)是“计算线性时间内距离变换的通用算法”。根据个人经验:Fortune的算法很难实现。Guibas和Stolfi提出的分治算法还不错;他们给出了详细的伪代码,很容易转录成过程编程语言。如果有近似退化的输入并使用浮点,两者都会爆炸,但由于基本体是二次的,如果可以将坐标表示为32位整数,则可以使用64位执行行列式计算
一旦你工作了,你可以考虑替换你的KD树算法,它有θ(√n) 最糟糕的情况是,算法可以处理平面细分。
您可以在D3.js库中找到一个很好的实现:感谢链接。我最终使用了D3实现,非常棒。