25次发布
0.6.0 | 2024年4月10日 |
---|---|
0.5.9 | 2023年7月4日 |
0.5.7 | 2023年6月30日 |
0.4.1 | 2023年4月20日 |
0.1.5 | 2023年2月8日 |
#453 in 数学
每月55次下载
150KB
3.5K SLoC
meshless_voronoi
Rust中Meshless Voronoi算法的实现。
该算法主要针对生成3DVoronoi图,但也可以用于计算1D和2D Voronoi图。
类似于Voro++
,此算法是无网格的,这意味着不构建全局几何形状。相反,采用基于单元的方法,我们只计算积分(单元/面体积和质心)和连通信息(可以确定单元的邻居)。
该算法可以生成具有矩形边界或周期性边界条件的Voronoi网格,并支持计算Voronoi网格的子集。
如有必要,使用任意精度算术来处理退化情况并确保全局局部几何一致性。有关更多信息,请参阅本参考文献的附录。
Nicolas Ray, Dmitry Sokolov, Sylvain Lefebvre, Bruno Lévy. GPU上的Meshless Voronoi。ACM Transactions on Graphics,2018,37(6),第1-12页。10.1145/3272127.3275092. hal-01927559
特性
-
构建1D、2D和3D Voronoi网格。
-
部分构建网格。
-
并行构建Voronoi网格。
-
将Voronoi网格保存到HDF5格式。
-
评估单元(例如,加权质心)和面(例如,立体角)的自定义积分。
整数算术后端
您可以从五个后端中选择任意精度整数算术。这些后端都提供相同的功能,只在性能和许可方面有所不同。
对于大多数实际应用,后端的选择不会显著改变性能(请参阅以下受扰网格的结果)。然而,对于高度退化的种子配置(即具有许多多于四个(几乎)共球种子点的组)的情况,必须执行许多任意精度算术测试,导致此类情况下的某些性能差异(请参阅以下完美网格的结果)。
64³种子构建3D Voronoi网格的基准
完美网格 | 扰动网格 | |
---|---|---|
绒面 |
2.062秒 ± 0.005秒 | 1.308秒 ± 0.008秒 |
孔雀石 |
2.846秒 ± 0.016秒 | 1.293秒 ± 0.005秒 |
ibig |
3.105秒 ± 0.048秒 | 1.320秒 ± 0.022秒 |
大薯 |
3.249秒 ± 0.091秒 | 1.313秒 ± 0.009秒 |
num-bigint |
4.852秒 ± 0.078秒 | 1.301秒 ± 0.004秒 |
详见下一节以获取详细信息。
货物特性
注意:选择后端的功能都是相互排斥的。
rayon
-- 启用Voronoi网格的并行构建。ibig
-- 使用ibig
crate(MIT/Apache 2.0)作为任意精度整数算术后端。通常具有良好的性能,但对于高度退化的种子配置,可能比rug
后端慢50%。dashu
-- 使用dashu
crate(MIT/Apache 2.0)作为任意精度整数算术后端。与ibig
后端类似性能。malachite
-- 使用malachite
crate作为任意精度整数算术后端。 警告:这会改变许可协议为更严格的LGPL-3.0-only许可。比dashu
后端略快(比rug
慢最多40%)。num_bigint
-- 使用num_bigint
crate(MIT/Apache 2.0)作为任意精度整数算术后端。对于退化的种子配置性能最差(测量值高达比rug
慢140%)。rug
-- 使用rug
crate作为任意精度整数算术后端。 警告:这会改变许可协议为更严格的LGPL-3.0+许可。最快的后端,但依赖于通过gmp-mpfr-sys
crate的GNU GMP,这需要C编译器进行构建,因此构建时间最慢。hdf5
-- 允许将Voronoi网格保存到
许可协议
根据您的选择,在以下情况下获得许可
- Apache-2.0 OR MIT
- 当使用
ibig
、dashu
或num_bigint
任意精度算术后端时。 - LGPL-3.0-only当使用
malachite
后端时。
LGPL-3.0+当使用rug
后端时。
依赖项
~7-15MB