非单调样条拟合
Non-monotonic spline fitting
我已经使用 2 个 2D 拟合完成了 3D 路径的样条插值。使用插值条件以及 2 次可微分的要求,我得到了插值 3D 路径所需的方程式。
但是我开始意识到,我忽略了一个事实,即由于障碍物路径不是单调的,因此无法计算拟合样条。
如果没有单调的数据集,我找不到任何关于样条拟合的东西。有没有办法接受这个事实?
(我发现,这些点必须满足(Schoenberg-Whitney)条件,这对我来说基本上看起来像单调性,可以通过最小二乘法唯一拟合)。
对采用或不同算法有什么建议吗?到目前为止,我唯一能找到的是:
heremite,这需要端点处的导数,这对我的目的来说并不理想。我会喜欢像 "regular" 样条曲线(具有连续性条件的三阶多项式)这样简单的东西。
我还找到了 this question,它只说明了一些关于厄米多项式的内容(我想避免)。
最后这用于控制算法,需要隐式定义曲线(非参数化)。例如 y - p(x) = 0
。对我来说不可能的是: p(t)=y, x(t)
其中 t 是参数。如果可以消除参数,产生隐式表示,就可以了。
您可以通过简单地将点到点的累积距离作为独立(单调)参数来为任何系列的 3D 点生成单调性。将其视为连接所有点的分段线性路径的长度 p
...
编辑: ...喜欢(伪代码):
p[0] = 0;
p[i] = p[i-1] + sqrt((x[i]-x[i-1])^2 + (y[i]-y[i-1])^2 + (z[i]-z[i-1])^2)
获得此参数后,您可以分别对三个维度(x、y 和 z)进行三个样条曲线拟合。这样您的 3D 曲线拟合就可以处理任何可以想到的点系列。使用此路径 p
进行样条插值也会使它更多 "physical" 因为靠近在一起的点将被这样处理。
为简单起见 - 特别是如果您的数据点或多或少地间隔相等 - 您可以简单地使用每个点的序数(如 0、1、2、3 ...)作为独立的单调递增参数.
由于路径不是单调的,因此不存在描述它们的(单射)函数!
这很容易想到,如果考虑一条路径,你可以向前、向后和再次向前。如果没有参数表示(例如时间),路径就不会是唯一的。
换句话说:如果 y=sin(x)
,现在 y = 0
的路径在哪个位置?无限解当然是 x=k*pi
,但这里很明显,这不是唯一的。
我已经使用 2 个 2D 拟合完成了 3D 路径的样条插值。使用插值条件以及 2 次可微分的要求,我得到了插值 3D 路径所需的方程式。 但是我开始意识到,我忽略了一个事实,即由于障碍物路径不是单调的,因此无法计算拟合样条。
如果没有单调的数据集,我找不到任何关于样条拟合的东西。有没有办法接受这个事实? (我发现,这些点必须满足(Schoenberg-Whitney)条件,这对我来说基本上看起来像单调性,可以通过最小二乘法唯一拟合)。
对采用或不同算法有什么建议吗?到目前为止,我唯一能找到的是: heremite,这需要端点处的导数,这对我的目的来说并不理想。我会喜欢像 "regular" 样条曲线(具有连续性条件的三阶多项式)这样简单的东西。
我还找到了 this question,它只说明了一些关于厄米多项式的内容(我想避免)。
最后这用于控制算法,需要隐式定义曲线(非参数化)。例如 y - p(x) = 0
。对我来说不可能的是: p(t)=y, x(t)
其中 t 是参数。如果可以消除参数,产生隐式表示,就可以了。
您可以通过简单地将点到点的累积距离作为独立(单调)参数来为任何系列的 3D 点生成单调性。将其视为连接所有点的分段线性路径的长度 p
...
编辑: ...喜欢(伪代码):
p[0] = 0;
p[i] = p[i-1] + sqrt((x[i]-x[i-1])^2 + (y[i]-y[i-1])^2 + (z[i]-z[i-1])^2)
获得此参数后,您可以分别对三个维度(x、y 和 z)进行三个样条曲线拟合。这样您的 3D 曲线拟合就可以处理任何可以想到的点系列。使用此路径 p
进行样条插值也会使它更多 "physical" 因为靠近在一起的点将被这样处理。
为简单起见 - 特别是如果您的数据点或多或少地间隔相等 - 您可以简单地使用每个点的序数(如 0、1、2、3 ...)作为独立的单调递增参数.
由于路径不是单调的,因此不存在描述它们的(单射)函数!
这很容易想到,如果考虑一条路径,你可以向前、向后和再次向前。如果没有参数表示(例如时间),路径就不会是唯一的。
换句话说:如果 y=sin(x)
,现在 y = 0
的路径在哪个位置?无限解当然是 x=k*pi
,但这里很明显,这不是唯一的。