Math 考虑加速度的插值

Math 考虑加速度的插值,math,physics,Math,Physics,我真的不知道我想做的是否被认为是插值,但我会尽力解释 现在,当我想从A点到点的时候,简单地考虑时间只有1个坐标空间,用线性插值公式计算位置: P(t) = A + (B-A) * (t / T), T != 0 这在大多数情况下都很好,但我想对加速和制动进行如下分类: 前x%的时间是从vi速度加速到v速度 下一个y%的时间是恒定的v速度 最后z%的时间将减速,以在t=t时达到vf速度 考虑到加速和制动,如何计算[0,t]中的Pt,t?考虑到我们有以下时间点: t0 = 0 is the beg

我真的不知道我想做的是否被认为是插值,但我会尽力解释

现在,当我想从A点到点的时候,简单地考虑时间只有1个坐标空间,用线性插值公式计算位置:

P(t) = A + (B-A) * (t / T), T != 0
这在大多数情况下都很好,但我想对加速和制动进行如下分类:

前x%的时间是从vi速度加速到v速度 下一个y%的时间是恒定的v速度 最后z%的时间将减速,以在t=t时达到vf速度
考虑到加速和制动,如何计算[0,t]中的Pt,t?

考虑到我们有以下时间点:

t0 = 0 is the beginning of the movement
ta is the point when acceleration ends
td is the point when decceleration begins
T is the end of the movement
然后我们有三个部分的运动。[t0,ta],ta,td],td,T]。可以单独指定每一项。对于加速/减速,我们需要计算加速aa和减速ad,如下所示:

aa = (v - vi) / (ta - t0)
ad = (vf - v) / (T - td)
根据您的问题,所有值都已给出

那么运动可以表示为:

P(t) :=
    if(t < ta)
        1 / 2 * aa * t^2 + vi * t + A
    else if(t < td)
        v * (t - ta) + 1 / 2 * aa * ta^2 + vi * ta + A
                    // this is the length of the first part
    else
        1 / 2 * ad * (t - td)^2 + v * (t - td) 
          + v * (td - ta) + 1 / 2 * aa * ta^2 + vi * ta + A
          //those are the lengths of the first two parts
然后公式会变得稍微短一点:

P(t) :=
    if(t < ta)
        1 / 2 * aa * t^2 + vi * t + A
    else if(t < td)
        v * (t - ta) + s1
    else
        1 / 2 * ad * (t - td)^2 + v * (t - td) + s1 + s2

考虑到我们有以下时间点:

t0 = 0 is the beginning of the movement
ta is the point when acceleration ends
td is the point when decceleration begins
T is the end of the movement
然后我们有三个部分的运动。[t0,ta],ta,td],td,T]。可以单独指定每一项。对于加速/减速,我们需要计算加速aa和减速ad,如下所示:

aa = (v - vi) / (ta - t0)
ad = (vf - v) / (T - td)
根据您的问题,所有值都已给出

那么运动可以表示为:

P(t) :=
    if(t < ta)
        1 / 2 * aa * t^2 + vi * t + A
    else if(t < td)
        v * (t - ta) + 1 / 2 * aa * ta^2 + vi * ta + A
                    // this is the length of the first part
    else
        1 / 2 * ad * (t - td)^2 + v * (t - td) 
          + v * (td - ta) + 1 / 2 * aa * ta^2 + vi * ta + A
          //those are the lengths of the first two parts
然后公式会变得稍微短一点:

P(t) :=
    if(t < ta)
        1 / 2 * aa * t^2 + vi * t + A
    else if(t < td)
        v * (t - ta) + s1
    else
        1 / 2 * ad * (t - td)^2 + v * (t - td) + s1 + s2

这不是一个真正的编程问题。但是,对于承受恒定加速度的物体的位置,还有一个公式。你可以通过两次积分力方程并考虑必要的边界条件来推导位置公式。下面我给出的答案的另一个替代方法是使用hermite插值。为此,可以指定起点和终点及其切线。我不确定这是否是你所需要的,因为没有匀速运动,但你可能想看看。这显然更容易实现。这个问题似乎离题了,因为它是关于数学/物理而不是编程的。这不是一个真正的编程问题。但是,对于承受恒定加速度的物体的位置,还有一个公式。你可以通过两次积分力方程并考虑必要的边界条件来推导位置公式。下面我给出的答案的另一个替代方法是使用hermite插值。为此,可以指定起点和终点及其切线。我不确定这是否是你所需要的,因为没有匀速运动,但你可能想看看。这个问题似乎离题了,因为它是关于数学/物理而不是编程的。