#bezier #geometry

nbezier

基于nalgebra的贝塞尔曲线库

1个不稳定发布

0.2.1 2022年9月27日

#25 in #bezier

MIT 协议

76KB
1.5K SLoC

nbezier

nbezier旨在成为处理任意次数贝塞尔曲线的通用库。

它使用nalgebra(因此得名)来实现通用的BezierCurve

此库还提供了一个非泛型类型SimpleCurve,隐藏了nalgebra的复杂性。SimpleCurve针对三次贝塞尔曲线进行了优化,同时支持任意次数。

当前功能

  • 将曲线存储为控制点列表(确切地说是一个矩阵的列向量)
  • De Castlejau算法
    • 评估一个点
    • 分割曲线
  • 计算曲线的多项式及其导数
    • 法向量和切向量
  • 曲线的控制点轴对齐的边界框和凸包
  • 提升或降低曲线的次数

实验性功能

  • 在曲线上找到一个点
  • 找到两条曲线之间的所有交点

计划功能

  • 有什么建议吗?

SimpleCurve是如何优化的?

使用nalgebra的BezierCurve在其次数上是泛型的。SimpleCurve是一个枚举,它在其4个变体中存储次数为1、2、3以及更高次数的曲线。由于这些低次数是它们的专用变体,具有专用类型,因此Rust可以在编译时计算大量的“魔法常数”。此外,这些次数的变体完全存储在堆栈上,这为它们提供了巨大的性能提升。

依赖项

~3MB
~57K SLoC