2个版本

0.2.1 2024年6月6日
0.2.0 2024年5月17日

#899 in 算法


用于 f3l

MIT/Apache

140KB
3K SLoC

F3l功能

数据特征。

边界

  • AABB
  • OBB
let obb = OBB::compute(&vertices);
// Get OBB 8 corners
let p0 = obb.center
    - obb.primary * obb.length[0]
    - obb.secondary * obb.length[1]
    - obb.tertiary * obb.length[2];
let p1 = p0 + obb.primary * obb.length[0] * 2.;
let p2 = p0 + obb.secondary * obb.length[1] * 2.;
let p3 = p0 + obb.tertiary * obb.length[2] * 2.;
let p4 = p2 + obb.primary * obb.length[0] * 2.;
let p5 = p1 + obb.tertiary * obb.length[2] * 2.;
let p6 = p2 + obb.tertiary * obb.length[2] * 2.;
let p7 = p4 + obb.tertiary * obb.length[2] * 2.;

法线估计

  1. 对每个点搜索邻居。
  2. 计算邻居的特征向量。
  3. 最小的特征值是法线。

法线搜索方法 [KDTree]

// Radius
let mut estimator = NormalEstimation::new(SearchBy::Radius(0.08f32));
// KNN
let mut estimator = NormalEstimation::new(SearchBy::Count(10));
// Compute!
if !estimator.compute(&vertices) {
    println!("Compute Normal Failed. Exit...");
    return;
}
let normals = estimator.normals();

依赖项

~5–11MB
~246K SLoC