2个不稳定版本
0.2.0 | 2023年6月7日 |
---|---|
0.1.0 | 2021年2月22日 |
#686 in 数学
每月下载量30次
115KB
1.5K SLoC
stroke
一个零分配库,提供Bézier曲线、B-Spline曲线和N维欧几里得空间中最高到三次Bézier曲线的专用实现。它旨在用于通用/嵌入式/wasm,支持100%安全的Rust编写的#![no_std]环境,具有最少的依赖。
库大量使用const-generics和某些相关未稳定功能,因此需要nightly编译器。
它提供了一个const-generic的N维点类型,这样您就可以在不添加任何其他依赖的情况下使用该库。
如果您想与其他库提供的类型集成,您可以通过实现库所依赖的小型Point trait来完成此操作(因为它不区分点及其位置向量)。
由plotters.rs创建
目前,泛型版本没有实现专用版本的所有方法(因为算法稍微复杂一些),但最终应该达到同等水平。
目标
- 提供泛型Bézier曲线和B-Splines。由于它们的使用频率很高,还进一步提供直线、二次和三次Bézier曲线
- 支持所有目标的无std
- 广泛的单元测试和代码覆盖率
- 对其他泛型数学库的集成测试(待定 - 可能是optimath、aljabar、micromath、nalgebra),因为点类型在许多库中重复
非目标
- 专注于渲染或最高性能(无GPU)的使用
功能
这些都是主要支持的功能。在某些情况下还公开了一些其他实用方法。
二次和三次Bézier曲线
- 评估(De Casteljau,直接)
- 分割
- 导数
- 弧长(线性近似)
- 弧长(Legendre-Gauss)
- 曲率/半径(Frenet-Serret Frame)
- 边界框
- 紧边界框
泛型Bézier曲线
- 评估(De Casteljau)
- 分割
- 导数
- 弧长(线性近似)
- 弧长(Legendre-Gauss)
- 曲率/半径(Frenet-Serret Frame)
- 边界框
- 紧边界框
泛型B-Spline
- 评估(De Boor)
- 分割
- 导数
- 弧长(线性近似)
- 弧长(Legendre-Gauss)
- 曲率/半径(Frenet-Serret Frame)
- 边界框
- 紧边界框
相关
如果您正在寻找具有gpu支持的已发布crate进行渲染,请检查Lyon,我从其中获得了灵感,它真的很不错。它具有线条、二次和三次贝塞尔曲线,以及弧线、三角形和其他几何对象,但没有一般的贝塞尔曲线或B样条。它似乎也支持wasm。
此外,还有Twinklebear/bspline,这是一个非常干净且有用的bspline库。然而,它依赖于std,并且其简单的Interpolate trait没有提供访问点各个维度的途径,因此在库中不实现导数。
这本清晰的在线书籍贝塞尔曲线入门帮助我解决了许多算法问题。
依赖项
~1MB
~21K SLoC