Gafferon Games tiene un gran artículo sobre la integración RK4 para construir simulaciones físicas que se puede encontrar aquí: Conceptos básicos de integración
Personalmente, mis conocimientos de matemáticas y física podrían mejorar. Me siento cómodo en el ámbito de las matemáticas vectoriales, trigonométricas, algunas estadísticas (he tenido que usar fórmulas de regresión de líneas lineales para software, etc.), y básicamente la mayoría de las cosas desde el nivel secundario hasta la universidad de primer año.
Ahora a la pregunta, leí este artículo, descargué la fuente asociada y depuré línea por línea para tratar de comprender lo que está sucediendo y todavía siento que claramente no entiendo lo que estoy viendo. He buscado en Internet tratando de encontrar las versiones "Para Dummies", francamente aprendo un poco diferente y mirando las fórmulas todo el día con el énfasis en la memorización no va a ser suficiente, ya que necesito entender lo que está sucediendo, así que puede ser flexible aplicándolo.
Así que esto es lo que creo que entiendo hasta ahora, pero espero que alguien más pueda aclararme o corregirme por completo. El RK4 usa un paso de Euler, luego basa eso para avanzar en el tiempo para calcular varios pasos más esencialmente de Euler (?) Y determina, utilizando una suma ponderada, ¿cuál es la mejor posición y velocidad para el siguiente cuadro?
Además, ese método de aceleración (convertido en AS3):
private function acceleration(state:State, time:Number):Number
{
const k:int = 10;
const b:int = 1;
return - k*state.x - b*state.v;
}
toma una masa constante (10) y una fuerza (1)? y devuelve un cálculo extraño No tengo idea de por qué ...- masa * posición - fuerza * velocidad? ¿Qué?
Luego, para mi último poco de confusión, en los métodos de evaluación que se parecen a (AS3):
private function evaluateD(initial:State, time:Number, dtime:Number, d:Derivative):Derivative
{
var state:State = new State();
state.x = initial.x + d.dx*dtime;
state.v = initial.v + d.dv*dtime;
var output:Derivative = new Derivative();
output.dx = state.v;
output.dv = acceleration(state, time+dtime);
return output;
}
Almacenamos un nuevo estado con el paso de tiempo, luego configuramos una derivada para que regrese ... Entiendo esto como se usa en el proceso de aproximación, ¡pero qué es esto !:
output.dx = state.v;
output.dv = acceleration(state, time+dtime);
// ok I get we are getting the new velocity since v = a * t, obviously I
// don't what acceleration() is returning though.
Establecemos el cambio de salida derivada en la posición a la nueva velocidad de los estados? ¿Eh?
Por último, esta simulación de prueba se ejecuta haciendo esto:
var state:State = new State();
state.x = 100;
state.v = 0;
t = 0;
dt = 0.1;
while (Math.abs(state.x)>0.001 || Math.abs(state.v)>0.001)
{
trace(state.x, state.v);
integrate(state, t, dt);
t += dt;
}
Entonces, ¿estamos estableciendo un nuevo estado con un valor posicional de 100 y una velocidad de 0? ¿Cuál es el punto de esta simulación si no tenemos velocidad ...
De todos modos, no hace falta decir que estoy bastante confundido y me he alejado del planeta Tierra. Esperando que alguien pueda aclarar esto para mí.