已发布 34 个版本

0.10.4 2024 年 7 月 2 日
0.10.3 2024 年 3 月 12 日
0.10.2 2024 年 2 月 13 日
0.10.0 2023 年 12 月 19 日
0.1.0 2022 年 12 月 31 日

算法 类别中排名 242

Download history 136/week @ 2024-06-28 80/week @ 2024-07-05 297/week @ 2024-07-26 46/week @ 2024-08-02

每月下载量 343

MIT 许可证 MIT

54KB
1.5K SLoC

d3_geo_voronoi_rs

rust 2021 版本

crates.io Documentation Download

给定一组球坐标下的对象,它计算它们的 Delaunay 三角化和其对偶,Voronoi 图。

这是将 d3-geo-voronoi 库移植到 RUST 库中。

它是将 d3 模块移植到 rust 的集合的一部分。

例如,库可以用来计算以下 Delaunay 网格。 来自球面上随机点的 Delaunay 网格

(从球面上的 6,000 个随机点计算而来)

目前,我们有 84% 的测试覆盖率(如 cargo tarpaulin -o Html 报告)

性能分析

演示页面

原始 JavaScript 库有一个基准测试,以网页形式记录每秒显示的帧数。为了比较,基准测试也已移植。

  • javascript - d3-geo_voronoi/src/benchmark/sphereCanvas.html
  • rust - rust_d3_geo_voronoi/benchmark.

衡量库的性能很复杂,因为使用库的不同应用程序可能会看到不同的结果。桌面和移动性能可能不同。

通常有两种衡量性能提升的方法:

A) 速度:通过询问执行某项计算需要多长时间?

B) 吞吐量:通过询问在给定时间内可以完成多少工作?

A 和 B 理想情况下是线性相关的,但高吞吐量通常需要更多内存,这可能会导致页面交换增加。JavaScript 使用垃圾回收,Rust 不使用。在垃圾回收环境中,回收器的动态可能导致 A 和 B 报告的数字不同。

以下是基准测试的结果:

A) 当我为60ps调整基准测试时,我发现JavaScript可以在16ms内渲染600个点。Rust版本完成相同的工作量只需要8.165ms。(速度提升1.95倍)。

B) 当我增加分配给Rust版本渲染的点数时,我发现我可以在16ms内渲染1220个点。增加了不到2倍。

我目前正在寻找更多的基准测试,一个多样化的示例应用代码集合,将增加我们对预期的信心。

性能分析目标

此工作区包含一个名为"profile_target"的二进制文件,它输出类似于demo_page的计算结果。在API最终确定之前——我目前使用cargo flame-graph来识别任何明显的优化。

来自rust_d3_geo_voronoi

cargo install  flamegraph
cargo flamegraph -- profile_target

进一步开发

考虑到从0.9.0迁移到0.10.0。许多非规范化的"新"方法已被TryFrom实现所取代。有关更多详细信息,请参阅CHANGELOG.md

目前,当使用f64作为浮点类型时,演示才能正常工作。[对于f32,单元格的完整性被破坏,因为一些单元格似乎占据了整个球体。] 待移植:

contour.js 和 geo-contour-test.js

目前有一个失败的测试套件geo_voronoi_test.rs "geoVoronoi.hull在困难的多边形上不会断裂"。

构建基准测试的说明

我正在使用wasm pack将以下包打包成一个单独的wasm文件。rust_d3_georust_d3_delaunay

该应用程序在球体上显示大量单元格的Delaunay网格。

要构建并启动Web服务器:

cd benchmark\www
npm install
npm run start

最后一个命令将自动启动您的Web浏览器。

对于基准测试,为了获得最佳性能

cd benchmark\www
npm run build
npm run serve

依赖关系

~17MB
~299K SLoC