Dr.*_*ius 19
从物理学的角度来看:
您必须假设中间点的加速度才能获得插值.
如果您的物理系统相对较好(如汽车或飞机),而不是例如弹跳球,您可以继续假设加速度随点之间的时间线性变化.
恒定变化加速运动的矢量方程是:
x''[t] = a t + b
Run Code Online (Sandbox Code Playgroud)
除了t之外的所有大小都是向量.
对于你已经知道的每个段v(t = t0)x(t = t0)tfinal和x(tfinal)v(tfinal)
通过求解微分方程,您得到:
Eq 1:
x[t_] := (3 b t^2 Tf + a t^3 Tf - 3 b t Tf^2 - a t Tf^3 - 6 t X0 + 6 Tf X0 + 6 t Xf)/(6 Tf)
Run Code Online (Sandbox Code Playgroud)
并强加了您获得的位置和速度的初始和最终约束:
方程2:
a -> (6 (Tf^2 V0 - 2 T0 Tf Vf + Tf^2 Vf - 2 T0 X0 + 2 Tf X0 +
2 T0 Xf - 2 Tf Xf))/(Tf^2 (3 T0^2 - 4 T0 Tf + Tf^2))
b -> (2 (-2 Tf^3 V0 + 3 T0^2 Tf Vf - Tf^3 Vf + 3 T0^2 X0 -
3 Tf^2 X0 - 3 T0^2 Xf + 3 Tf^2 Xf))/(Tf^2 (3 T0^2 - 4 T0 Tf + Tf^2))}}
Run Code Online (Sandbox Code Playgroud)
因此,将方程2的值插入到方程1中,您可以根据初始和最终位置和速度获得点的时间插值.
HTH!
编辑
一些在两个维度上具有突然速度变化的示例(在3D中完全相同).如果初始和最终速度相似,您将获得"更直"的路径.
假设:
X0 = {0, 0}; Xf = {1, 1};
T0 = 0; Tf = 1;
Run Code Online (Sandbox Code Playgroud)
如果
V0 = {0, 1}; Vf = {-1, 3};
Run Code Online (Sandbox Code Playgroud)

V0 = {0, 1}; Vf = {-1, 5};
Run Code Online (Sandbox Code Playgroud)
V0 = {0, 1}; Vf = {1, 3};
Run Code Online (Sandbox Code Playgroud)
这是一个动画,您可以看到速度从V0 = {0,1}变为Vf = {1,5}:
在这里,您可以看到3D中的加速体,其间位置相等:

编辑
一个完整的问题:
为方便起见,我将使用笛卡尔坐标.如果你想从lat/log/alt转换为Cartesian,你可以:
x = rho sin(theta) cos(phi)
y = rho sin(theta) sin(phi)
z = rho cos(theta)
Run Code Online (Sandbox Code Playgroud)
phi是经度,theta是纬度,rho是你的高度加上地球的半径.
所以假设我们开始我们的细分市场:
t=0 with coordinates (0,0,0) and velocity (1,0,0)
Run Code Online (Sandbox Code Playgroud)
结束于
t=10 with coordinates (10,10,10) and velocity (0,0,1)
Run Code Online (Sandbox Code Playgroud)
我清楚地对坐标原点进行了更改,以便在起点处设置原点.这只是为了得到漂亮的圆形数字......
所以我们在a和b的公式中替换这些数字并得到:
a = {-(3/50), -(3/25), -(3/50)} b = {1/5, 3/5, 2/5}
Run Code Online (Sandbox Code Playgroud)
用那些我们去eq 1,对象的位置由下式给出:
p[t] = {1/60 (60 t + 6 t^2 - (3 t^3)/5),
1/60 (18 t^2 - (6 t^3)/5),
1/60 (12 t^2 - (3 t^3)/5)}
Run Code Online (Sandbox Code Playgroud)
就是这样.你得到1到10秒的位置,用上面的等式中的valus代替t.
动画运行:
编辑2
如果你不想弄乱垂直加速度(也许是因为你的"速度计"没有读取它),你可以只为z轴分配一个恒定的速度(考虑到它平行于z轴有一个非常小的错误) Rho轴),等于(Zfinal - Zinit)/(Tf-T0),然后解决飞机遗忘海拔的问题.