17 个稳定版本
1.1.0 |
|
---|---|
1.0.18 | 2022年3月2日 |
1.0.13 | 2022年3月1日 |
1.0.4 | 2022年2月28日 |
在 算法 中排名 1681
每月下载量 45 次
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_count
和 min_distance
参数,找到存在但越来越难以找到的可行集的有趣临界点。
例如,在屏幕大小为 [2560, 1440] 且点数为 500 的情况下,最小距离在 65 到 70 之间时达到平衡点。
在这些数字下,存在一组有限的可行分布,这些分布能够容纳所有点同时保持指定的最小距离。因此,您将看到算法在最终确定一个可行的分布之前需要花费一些时间。将最小距离稍微增加一点,难度将进一步提高,直到最终没有可行的解决方案,算法将循环。
之前 - 点的初始随机分布
之后 - 每个点之间至少有最小距离的可行分布点集
依赖项
~15–24MB
~174K SLoC