Gafferon Games ha un ottimo articolo sull'integrazione RK4 per simulazioni di fisica delle costruzioni che può essere trovato qui: Nozioni di base sull'integrazione
Personalmente le mie conoscenze di matematica e fisica potrebbero usare il miglioramento. Mi sento a mio agio nel regno della matematica vettoriale, dei trigoni, di alcune statistiche (ho dovuto usare formule di regressione di linea lineare per software, ecc.), E fondamentalmente la maggior parte delle cose da scuola superiore al college del primo anno.
Ora alla domanda, ho letto questo articolo, ho scaricato l'origine associata e ho eseguito il debug riga per riga per cercare di capire cosa sta succedendo e sento ancora che non riesco a ottenere quello che sto guardando. Ho cercato su Internet cercando di trovare le versioni "For Dummies", francamente imparo un po 'diversamente e osservando le formule tutto il giorno con l'accento sulla memorizzazione non lo taglierò perché devo capire cosa sta succedendo, quindi può essere flessibile applicandolo.
Quindi, ecco quello che penso di aver capito finora, ma spero che qualcun altro possa chiarirmi o correggermi completamente. L'RK4 utilizza un passo di Eulero, quindi basa questo per spostarsi in avanti nel tempo per calcolare molti più passi essenzialmente di Eulero (?) E determina usando una somma ponderata quale sia la migliore posizione e velocità per il fotogramma successivo?
Inoltre quel metodo di accelerazione (convertito in AS3):
private function acceleration(state:State, time:Number):Number
{
const k:int = 10;
const b:int = 1;
return - k*state.x - b*state.v;
}
prende una massa costante (10) e una forza (1)? e restituisce alcuni strani calcoli Non ho idea del perché ...- posizione * di massa - forza *? che cosa?
Quindi per il mio ultimo po 'di confusione, nei metodi di valutazione che sembrano (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;
}
Memorizziamo un nuovo stato con il passaggio temporale, quindi impostiamo una derivata per tornare ... Capisco come viene usato nel processo di approssimazione, ma cos'è questo !:
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.
Impostiamo la variazione dell'uscita derivata in posizione sulla nuova velocità degli stati? Eh?
Infine, questa simulazione di test viene eseguita nel modo seguente:
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;
}
Quindi stiamo impostando un nuovo stato con un valore posizionale di 100 e una velocità di 0? Qual è il punto di questa simulazione se non abbiamo velocità ...
Comunque, inutile dire che sono piuttosto confuso e mi sono allontanato dal pianeta Terra. Sperare che qualcuno là fuori possa chiarire questo per me.