#points #nearest-neighbor #set #distance #minimum #2d #cluster

decluster

迭代地去除簇化并替换一组随机化的二维点,直到找到一个每个点之间至少有指定最小距离的集合

17 个稳定版本

1.1.0 2022年3月1日
1.0.18 2022年3月2日
1.0.13 2022年3月1日
1.0.4 2022年2月28日

算法 中排名 1681

每月下载量 45

MIT 许可协议 MIT

41KB
111 代码行

decluster

本演示使用一个自定义的去簇化算法来执行对点的随机搜索,使得每个点与其他所有点至少保持指定的最小距离。它在一个初始的随机化二维点集合上工作,找到并替换簇以新的随机点,直到找到一个可行的去簇化集合。

基本用法

use decluster::Canvas;

pub fn main() {
    let point_count = 500;
    let min_distance = 66;

    Canvas::new(point_count, min_distance).show();
}

示例

有关更多说明和工作示例,请参阅随此库一起提供的 decluster_demo 示例。演示的源代码位于 examples 目录下。

要编译和运行示例,请使用

> cargo run --example decluster_demo --release

运行之后,可以调整 point_countmin_distance 参数,找到存在但越来越难以找到的可行集的有趣临界点。

例如,在屏幕大小为 [2560, 1440] 且点数为 500 的情况下,最小距离在 65 到 70 之间时达到平衡点。

在这些数字下,存在一组有限的可行分布,这些分布能够容纳所有点同时保持指定的最小距离。因此,您将看到算法在最终确定一个可行的分布之前需要花费一些时间。将最小距离稍微增加一点,难度将进一步提高,直到最终没有可行的解决方案,算法将循环。

之前 - 点的初始随机分布

Before

之后 - 每个点之间至少有最小距离的可行分布点集

After

依赖项

~15–24MB
~174K SLoC