Desde un punto de vista de la física:
Tiene que asumir algo sobre la aceleración en su int puntos intermedios para obtener la interpolación.
Si su sistema físico se comporta relativamente bien (como un automóvil o un avión), en oposición a, por ejemplo, una pelota que rebota, puede seguir suponiendo una aceleración que varía linealmente con el tiempo entre sus puntos.
la ecuación vectorial para una constante variando movimiento acelerado es:
x''[t] = a t + b
donde todas las magnitudes excepto t son vectores.
Para cada segmento que ya conoce v (t = t0) x (t = t0) TFINAL yx (TFINAL) v (TFINAL)
Al resolver la ecuación diferencial que se obtiene:
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)
y la imposición de las contraints inicial y final para la posición y la velocidad que se obtiene:
las ecuaciones 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))}}
Entonces, al insertar los valores para eqs 2 en eq 1, obtiene la interpolación temporal para sus puntos, en función de la posición y las velocidades iniciales y finales.
HTH!
Editar
Unos pocos ejemplos con cambio de velocidad abrupto en dos dimensiones (en 3D es exactamente el mismo). Si las velocidades inicial y final son similares, obtendrá rutas "más rectas".
Supongamos:
X0 = {0, 0}; Xf = {1, 1};
T0 = 0; Tf = 1;
Si
V0 = {0, 1}; Vf = {-1, 3};
V0 = {0, 1}; Vf = {-1, 5};
V0 = {0, 1}; Vf = {1, 3};
Aquí es una animación donde se puede ver el cambio de velocidad de V0 = {0, 1} a Vf = {1, 5}:
Aquí puede ver un cuerpo de aceleración en 3D con posiciones tomadas en intervalos iguales:
Editar
Un problema completo:
Para mayor comodidad, trabajaré en coordenadas cartesianas. Si desea convertir de lat/log/alt para cartesiana simplemente hacer:
x = rho sin(theta) cos(phi)
y = rho sin(theta) sin(phi)
z = rho cos(theta)
Dónde phi es la longitud, la latitud es theta y rho es la altitud más el radio de la Tierra.
Así Supongamos que empezamos nuestro segmento en:
t=0 with coordinates (0,0,0) and velocity (1,0,0)
y terminan a las
t=10 with coordinates (10,10,10) and velocity (0,0,1)
hice claramente un cambio en el origen de coordenadas para establecer el origen de mi punto de inicio. Esto es sólo para conseguir buenos números redondos ...
Así que reemplazar esos números en las fórmulas para A y B y bajar:
a = {-(3/50), -(3/25), -(3/50)} b = {1/5, 3/5, 2/5}
Con los vamos a la ecuación 1, y la posición de la objeto está dado por:
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)}
Y eso es todo. Obtienes la posición de 1 a 10 segundos reemplazando t por su valor en la ecuación anterior.
Las carreras de animación:
Editar 2
Si usted no quiere meterse con la aceleración vertical (tal vez debido a que su "velocímetro" no lo lee), que podría simplemente asignar una velocidad constante al eje z (hay un error muy pequeño para considerarlo paralelo al eje Rho), igual a (Zfinal - Zinit)/(Tf-T0), y luego resolver el problema en el plano de olvido la altitud
¿Qué piensas sobre el uso de los métodos de Catmull-Rom de Microsoft XNA Framework? – trackit
@trackit Nunca vi que C-R se usara para resolver un modelo cinemático, pero creo que se puede adaptar. El problema es que C-R no resuelve su problema con la velocidad (inicial/final) que coincide con AFAIK. –
@trackit No sé si está lo suficientemente claro en el texto de mi respuesta, pero solo tiene que escribir eqs 1 y 2 y listo ... –