10 个版本
0.2.1 | 2024年7月19日 |
---|---|
0.1.9 | 2024年6月7日 |
0.1.8 | 2024年5月6日 |
0.1.6 | 2024年4月29日 |
#239 in 数学
160 每月下载量
425KB
12K SLoC
Geogram Predicates
一个用于 rust 与 geogram 的 鲁棒谓词 的互操作性的 crate;通过 cxx
。
Geogram 是一个经过科学验证、文档完善、功能丰富的几何处理库,它利用了 "[...]算术过滤器(Meyer 和 Pion),扩展算术(Shewchuk)和简单性的模拟(Edelsbrunner)"。
确保在这里查看:这里.
它提供了对代码库中无依赖部分的便捷访问,即所谓的 可插拔软件模块(PSM),这使得编写这些的 cxx_bridges
变得容易。
示例
有了这个,你可以在你的 rust 项目中添加几何谓词,而无需重新实现现有的最先进软件。例如,使用 geogram 的内切圆谓词在 rust
中看起来像这样
use geogram_predicates as gp
// Define three points that form a triangle
let a = [0.0, 0.0];
let b = [2.0, 0.0];
let c = [1.0, 1.0];
// Define two points, to test against the triangles circum-circle
let p_in = [1.0, -0.4];
let p_out = [1.0, -1.2];
let is_in_circle_p_in = gp::in_circle_2d_SOS(&a, &b, &c, &p_in);
assert_eq!(1, is_in_circle_p_in);
let is_in_circle_p_out = gp::in_circle_2d_SOS(&a, &b, &c, &p_out);
assert_eq!(-1, is_in_circle_p_out);
// Do something fancy based on the result
// ...
可视化鲁棒谓词的优势
以下是比较原始和鲁棒的 orient_2d
& in_circle_2d
实现的可视化。你可以通过运行 orient_2d
或 in_circle_2d
的 examples 来生成这些图像。
原始 | 鲁棒 | |
---|---|---|
orient_2d |
||
in_circle_2d |
当前支持谓词列表
2D
- in_circle_2D_SOS()
- orient_2d()
- orient_2dlifted_SOS()
- points_are_identical_2d()
3D
- det_3d()
- dot_3d()
- in_sphere_3d_SOS()
- orient_3d()
- orient_3d_inexact()
- orient_3dlifted_SOS()
- points_are_colinear_3d()
- points_are_identical_3d()
其他
- det_4d()
- geo_sgn()
- initialize()
- show_stats()
- terminate()
还有很多谓词有待实现。如果您需要特定的一个,请查看 geogram 谓词列表。任何谓词的桥接器都很容易实现,因此这个 crate 很容易扩展。
设计
geogram谓词的API设计考虑了以下设计原则
- 与geogram的关系:函数名、签名和文档字符串应尽可能接近原始。这使得维护、更新和比较尽可能简单
贡献
如果您发现以下内容
- 缺少geogram谓词,
- 可以改进的软件设计原则,
- 潜在的错误,
- 模糊的文档、错别字等,
- ...
请随意提交一个PR来解决这个问题。
致谢
还应提到georust/robust,因为它帮助设置示例及其可视化。
许可证
include/geogram_predicates_psm
中的文件根据以下内容授权
版权所有 (c) 2000-2022 Inria。保留所有权利。
在满足以下条件的情况下,允许重新分配和使用源代码和二进制形式,无论是否修改:
源代码的重新分配必须保留上述版权声明、本条件列表和以下免责声明。以二进制形式重新分配必须在使用提供分配的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。未经事先书面许可,不得使用ALICE项目组或其贡献者的姓名认可或推广由此软件派生的产品。
本软件由版权所有者和贡献者“按原样”提供,并放弃了任何明确或暗示的保证,包括但不限于适销性和特定用途的适用性保证。在任何情况下,版权所有者或贡献者不对任何直接、间接、偶然、特殊、示范性或后续损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论造成损害的原因是什么,是否已通知可能发生此类损害。
本软件的其余部分根据Apache License, Version 2.0(类似于cxx的许可证)授权。
依赖关系
~0.5–2MB
~30K SLoC