一个高性能的三次样条。
import CubicSpline
import CubicSplineUI
let points:[SIMD2<Double>] = [[0.0,0.9],[0.3,1.0],[0.7,0.0],[0.9,0.6],[1.4,0.6],[2,1.0]]
let spline = CubicSpline(points:points)
像这样创建一个SwiftUI视图
SplineView(spline:spline)
这个视图会拉伸样条以适应可用空间。如果这不是你想要的,你可以从样条中获取路径
let path = spline.path
此路径将与用于创建样条的点处于相同的坐标系中。 然后你可以根据需要变换路径并构建自己的形状。
样条是可调用的,值范围为 0...1
let u = spline(t: 0.1)
你可以获得一个三次曲线数组,它们也是可调用的,值范围为 0...1
let curve = spline.cubicCurves.first!
let v = curve(t: 0.5)
要从点数组创建闭合样条,只需为 closed 传递 true
let spline = CubicSpline(points:points, closed:true)
CubicSpline 也支持 3 维和更高维度的样条。所有标量为 Double 的 SIMD 类型都将有效。
CubicSpline 使用 Accelerate 框架(或 Linux 上的 LAPack)来加速线性代数运算。在 M1 Max Mac Pro 上构建一个包含 10000 个点的样条需要 0.02 秒。
我尚未在 Linux 上进行测试,但它应该可以工作。 你需要安装 LAPack
sudo apt-get install liblapacke-dev
请注意,CubicSplineUI 在 Linux 上不可用,因为它需要 SwiftUI。