Gafferon Games a un excellent article sur l'intégration RK4 pour les simulations de physique du bâtiment qui peut être trouvé ici: Bases de l'intégration
Personnellement, mes connaissances en mathématiques et en physique pourraient être améliorées. Je me sens à l'aise dans le domaine des mathématiques vectorielles, du trigonomètre, de certaines statistiques (j'ai dû utiliser des formules de régression linéaire pour les logiciels, etc.) et, fondamentalement, de la plupart des choses du niveau secondaire au collège.
Maintenant à la question, j'ai lu cet article, téléchargé la source associée et débogué ligne par ligne pour essayer de comprendre ce qui se passe et j'ai toujours l'impression que je n'obtiens clairement pas ce que je regarde. J'ai cherché sur Internet en essayant de trouver les versions "pour les nuls", franchement j'apprends un peu différemment et regarder des formules toute la journée en mettant l'accent sur la mémorisation ne va pas le couper car j'ai besoin de comprendre ce qui se passe donc je peut être flexible en l'appliquant.
Voici donc ce que je pense comprendre jusqu'à présent, mais j'espère que quelqu'un d'autre pourra me clarifier ou me corriger complètement. Le RK4 utilise un pas d'Euler, puis base celui-ci pour avancer dans le temps pour calculer plusieurs pas d'Euler plus essentiellement (?) Et détermine à l'aide d'une somme pondérée quelle est la meilleure position et la meilleure vitesse pour la prochaine image?
De plus, cette méthode d'accélération (convertie 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;
}
prend une masse (10) et une force (1) constantes? et renvoie un calcul bizarre, je ne sais pas pourquoi ... - masse * position - force * vitesse? quelle?
Ensuite, pour ma dernière confusion, dans les méthodes d'évaluation qui ressemblent à (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;
}
Nous stockons un nouvel état avec le pas de temps, puis définissons une dérivée à retourner ... Je comprends en quelque sorte cela car il est utilisé dans le processus d'approximation, mais qu'est-ce que c'est!:
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.
Nous définissons le changement de sortie dérivé en position sur la nouvelle vitesse des états? Hein?
Enfin, cette simulation de test s'exécute en faisant ceci:
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;
}
Nous établissons donc un nouvel état avec une valeur de position de 100 et une vitesse de 0? Quel est l'intérêt de cette simulation si nous n'avons pas de vitesse ...
Quoi qu'il en soit, inutile de dire que je suis assez confus et que j'ai dérivé de la planète Terre. En espérant que quelqu'un là-bas puisse clarifier cela pour moi.