2个不稳定版本
0.2.0 | 2024年2月25日 |
---|---|
0.1.0 | 2023年3月25日 |
在算法中排名635
每月下载量3,282
30KB
595 行
最小包围圆
最小包围圆问题的迭代和递归二维实现,也称为最小圆问题、最小覆盖圆问题或边界圆问题。
本包中的实现解决了最小包围圆问题,Welzl算法以期望O(n)的时间复杂度解决这个问题。原始算法被构造成递归程序,这会导致在较大问题规模时调用栈溢出。因此,建议使用此包中的迭代实现。然而,递归版本也提供供演示目的。
请注意,期望的时间复杂度仅适用于随机输入(即您可能需要预先洗牌输入流)。
本实现基于以下工作
Welzl, E. (1991). Smallest enclosing disks (balls and ellipsoids). In New results and new trends in computer science (pp. 359-370). Springer, Berlin, Heidelberg.
示例
use smallest_enclosing_circle::smallest_enclosing_circle;
// Input: Four corner points of square box of unit size
let points = Vec::from([[0., 0.], [1., 0.], [1., 1.], [0., 1.]]);
let circle = smallest_enclosing_circle(points.into_iter());
println!("Circle: {:?}", circle);
// Circle: Three([0.0, 1.0], [1.0, 1.0], [1.0, 0.0], false);
println!("Center: {:?}", circle.center());
// Center: Some([0.5, 0.5])
println!("Radius: {:?}", circle.radius());
// Radius: 0.7071067811865476
许可证:MIT
依赖关系
~1MB
~20K SLoC