13

一点背景。我有一个使用三次样条进行一维轨迹的模拟。在这种情况下,三次样条将对象的位置、速度、加速度和加加速度指定为时间的函数。

如果你有:

  • 位置、速度、加速度和时间的初始值和最终值
  • 对最大和最小速度、加速度和加加速度的恒定值约束

然后有一个独特的样条。如果您不指定最终时间,而是想要最小时间轨迹,那么还有一个独特的样条曲线。

不过,实际上找到这些样条线可能是一件非常痛苦的事情。在指定时间的情况下,样条曲线最多由 7 个多项式组成,并且节点(多项式之间的过渡点)事先不知道。

这不是将样条拟合到一组数据的常见情况,它是根据边界条件和一些额外的约束创建样条。我读过人们使用类似安排并有类似需求的论文,但我从未找到任何处理生成此类样条曲线的库(甚至源代码)。我编写了一些处理大多数情况的代码,但它不是非常健壮或快速。我不太担心它会很快,但更强大会很棒。

有没有可以做到这一点的图书馆?开源代码,即使不是作为库构建?首选 C、C++、Java 或 Python,但如果它是开源的,其他语言仍可用作参考。

4

3 回答 3

1

样条曲线的问题是您必须求解联立线性方程来求解条件。如果您的情况有关于其中一些导数的更多信息,您可以使用分段三次 Hermite 插值 (PCHIP)。

例如,您可以提出不同的约束,使用 PCHIP 并贪婪地解决您的问题,而不是定义 jerk 必须为零。无论如何,即使您这次不能使用它,也要记住它。

http://www.mathworks.com/moler/interp.pdf

于 2011-04-04T21:08:39.790 回答
1

有一个用于 C++ 的 boost 库,它是开源的,可能会让你成功。

我认为它具有您需要的所有基本构建块(Legrendre/Laguerre/Hermite 多项式、求根等),尽管它实际上没有计算样条曲线。

库文档在这里,您可以自己检查:http: //www.boost.org/doc/libs/1_45_0/libs/math/doc/html/index.html

于 2011-01-26T18:33:17.870 回答
0

SciPy 的插值函数可能会有所帮助...另外,您可以轻松获得这些样条的导数或积分...我不确定您为什么说“不插值”...在我看来,这就是您要尝试的完成。

于 2011-02-02T15:29:36.860 回答