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 数学

Download history 5/week @ 2024-05-17 2/week @ 2024-05-24 1/week @ 2024-06-28 34/week @ 2024-07-05 48/week @ 2024-07-26 7/week @ 2024-08-02

每月55次下载

MIT OR Apache-2… 和可能 LGPL-3.0-only

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 -- 使用ibigcrate(MIT/Apache 2.0)作为任意精度整数算术后端。通常具有良好的性能,但对于高度退化的种子配置,可能比rug后端慢50%。
  • dashu -- 使用dashucrate(MIT/Apache 2.0)作为任意精度整数算术后端。与ibig后端类似性能。
  • malachite -- 使用malachitecrate作为任意精度整数算术后端。 警告:这会改变许可协议为更严格的LGPL-3.0-only许可。比dashu后端略快(比rug慢最多40%)。
  • num_bigint -- 使用num_bigintcrate(MIT/Apache 2.0)作为任意精度整数算术后端。对于退化的种子配置性能最差(测量值高达比rug慢140%)。
  • rug -- 使用rugcrate作为任意精度整数算术后端。 警告:这会改变许可协议为更严格的LGPL-3.0+许可。最快的后端,但依赖于通过gmp-mpfr-syscrate的GNU GMP,这需要C编译器进行构建,因此构建时间最慢。
  • hdf5 -- 允许将Voronoi网格保存到

许可协议

根据您的选择,在以下情况下获得许可

LGPL-3.0+当使用rug后端时。

依赖项
~7-15MB