5次发布
0.1.4 | 2022年10月20日 |
---|---|
0.1.3 | 2021年11月8日 |
0.1.2 | 2021年11月8日 |
0.1.1 | 2021年11月8日 |
0.1.0 | 2020年12月26日 |
#594 in 数学
28每月下载量
在rs_concaveman中使用
180KB
3.5K SLoC
robust-predicates
来自Jonathan Schewchuk库的鲁棒几何谓词https://www.cs.cmu.edu/~quake/robust.html。
此crate提供了与原始库相同的API,用于4个几何自适应谓词。它将
此crate可能被视为https://crates.io/crates/robust2d的简化版本。该库使用cc crate而不是gcc来编译
定义的函数
fn exactinit();
fn orient2d(pa:&[f64;2], pb:&[f64;2], pc:&[f64;2]) -> f64;
fn orient3d(pa:&[f64;3], pb:&[f64;3], pc:&[f64;3], pd:&[f64;3]) -> f64;
fn incircle(pa:&[f64;2], pb:&[f64;2], pc:&[f64;2], pd:&[f64;2]) -> f64;
fn insphere(pa:&[f64;3], pb:&[f64;3], pc:&[f64;3], pd:&[f64;3], pe:&[f64;3]) -> f64;
使用方法
在使用这些谓词时,需要考虑的唯一一件事是。与Schewchuk的库一样,此crate可以在不初始化全局变量的情况下工作,因为只需要用于自适应滤波步骤(困难的情况)。因此建议,但不是强制,在使用谓词之前使用
示例
// main.rs
use robust_predicates::*;
fn main() {
exactinit();
let points: [[f64;2];4] = [[0.0,0.0],[1.0,0.0],[0.0,1.0],[0.5,0.5]];
let c = incircle(&points[0],&points[1],&points[2],&points[3]);
let d = orient2d(&points[1],&points[0],&points[2]);
println!("{}",c);
println!("{}",d);
}
您可以使用insphere和orient3d以相同的方式使用,但需要额外的参数和[f64;3]数组。
致谢
此crate的开发受到https://crates.io/crates/robust2d的很大影响。如果您正在寻找2d谓词的包装器,该crate非常出色。
您还可以在https://www.cs.cmu.edu/~quake/robust.html获取原始的
无运行时依赖
~180KB