Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 跟踪三次插值路径_Algorithm_Math_Interpolation - Fatal编程技术网

Algorithm 跟踪三次插值路径

Algorithm 跟踪三次插值路径,algorithm,math,interpolation,Algorithm,Math,Interpolation,我通过三次插值平滑路径,基于: 当我试图通过从0.0到1.0迭代mu来跟踪路径上的一段时,距离并不相等。在屏幕截图中,红色点是路径的点,绿色和蓝色点是计算曲线的控制点 有没有一种方法可以计算出一段距离所覆盖的百分比,从而得到相等的距离 (我想计算这个路径上的一个运动,它的速度是相同的,并且取决于覆盖的距离的百分比。这样,在每个段的中间运动会更快)。 < p>这个函数在 xy1 和 xy2 < /c>之间进行值>代码> MU=0…1 /代码>。但是如果你在终点计算速度xp=diff(x,mu),

我通过三次插值平滑路径,基于:

当我试图通过从0.0到1.0迭代
mu
来跟踪路径上的一段时,距离并不相等。在屏幕截图中,红色点是路径的点,绿色和蓝色点是计算曲线的控制点

有没有一种方法可以计算出一段距离所覆盖的百分比,从而得到相等的距离


(我想计算这个路径上的一个运动,它的速度是相同的,并且取决于覆盖的距离的百分比。这样,在每个段的中间运动会更快)。

< p>这个函数在<代码> xy1 和<代码> xy2 < /c>之间进行值>代码> MU=0…1 /代码>。但是如果你在终点计算速度xp=diff(x,mu),你会发现

xp_1 = (x_2-x_0)/2                    xp_2 = (x_3-x_1)/2
因此,如果速度不相等,端点也不相等,那么速度会随位置而变化。即使其在端点处与
v=(x_2-x_0)/2=(x_3-x_1)/2相等

x_0 = x_2 -2 v                       x_3 = 2 v + x_1
或者速度函数

xp = v - 6*mu*(v+x_1-x_2) + 6*mu2*(v+x_1-x_2)
要使速度恒定,
v+x_1-x_2=0
,或
v=x_2-x_1
,这将产生线性插值函数

xp = x_2 - x_1
x = x_1 + mu*(x_2-x_1)

因此,要保持间距相等,必须使用线性插值。

对于值
mu=0..1
,此函数在
x_1
x_2
之间进行插值。但是如果你在终点计算速度xp=diff(x,mu),你会发现

xp_1 = (x_2-x_0)/2                    xp_2 = (x_3-x_1)/2
因此,如果速度不相等,端点也不相等,那么速度会随位置而变化。即使其在端点处与
v=(x_2-x_0)/2=(x_3-x_1)/2相等

x_0 = x_2 -2 v                       x_3 = 2 v + x_1
或者速度函数

xp = v - 6*mu*(v+x_1-x_2) + 6*mu2*(v+x_1-x_2)
要使速度恒定,
v+x_1-x_2=0
,或
v=x_2-x_1
,这将产生线性插值函数

xp = x_2 - x_1
x = x_1 + mu*(x_2-x_1)

因此,要保持间距相等,必须使用线性插值。

要提供相等的间距,需要获得长度相等的曲线段。请注意,可以使用积分()计算曲线长度(整个曲线及其片段的长度)

不幸的是,对于三次曲线,这种积分(这里是椭圆的)无法解析求解,应该用数值计算。例如,贝塞尔曲线就是一个众所周知的问题


因此,要构建等长线段,您需要以数字方式找到整个曲线的长度L,为第i点的位置找到
L[i]=i*L/n
,并以数字方式找到(例如,使用二进制搜索)该位置的参数。

要提供相等的间距,您需要获得等长的曲线线段。请注意,可以使用积分()计算曲线长度(整个曲线及其片段的长度)

不幸的是,对于三次曲线,这种积分(这里是椭圆的)无法解析求解,应该用数值计算。例如,贝塞尔曲线就是一个众所周知的问题


因此,要构建等长线段,您需要数值计算整个曲线的长度L,找到第i点位置的
L[i]=i*L/n
,并数值计算该位置的参数(例如,使用二进制搜索)。

这不是线性插值的公式。标题可以使用正确的插值名称,也可以显示适用于您的案例的代码。链接的
linearinterpole()
函数将为您提供恒定的速度。啊,我的错。谢谢你的提示,我希望这个术语现在是正确的。这不是线性插值的公式。标题可以使用正确的插值名称,也可以显示适用于您的案例的代码。链接的
linearinterpole()
函数将为您提供恒定的速度。啊,我的错。谢谢你的提示,我希望这个词现在是正确的。