Gafferon Games memiliki artikel hebat tentang Integrasi RK4 untuk membangun simulasi fisika yang dapat ditemukan di sini: Dasar-Dasar Integrasi
Secara pribadi, pengetahuan matematika dan fisika saya bisa menggunakan peningkatan. Saya merasa nyaman dalam bidang matematika vektor, trigonometri, beberapa statistik (saya harus menggunakan rumus regresi linier untuk perangkat lunak, dll.), Dan pada dasarnya sebagian besar hal tingkat sekolah tinggi hingga perguruan tinggi tahun pertama.
Sekarang untuk pertanyaan, saya sudah membaca artikel ini, mengunduh sumber terkait dan debugged baris demi baris untuk mencoba dan mendapatkan pemahaman tentang apa yang terjadi dan masih merasa seperti saya jelas tidak mendapatkan apa yang saya lihat. Saya telah mencari di internet mencoba menemukan versi "For Dummies", terus terang saya belajar sedikit berbeda dan menatap formula sepanjang hari dengan penekanan pada menghafal tidak akan memotongnya karena saya perlu memahami apa yang terjadi jadi saya bisa fleksibel mengaplikasikannya.
Jadi inilah yang saya pikir saya mengerti sejauh ini, tetapi saya berharap orang lain dapat mengklarifikasi atau mengoreksi saya sepenuhnya. RK4 menggunakan langkah Euler, lalu mendasarkannya untuk bergerak maju dalam waktu untuk menghitung beberapa langkah Euler yang lebih esensial (?) Dan menentukan dengan menggunakan jumlah tertimbang apa posisi dan kecepatan terbaik untuk frame berikutnya?
Selanjutnya metode akselerasi (diubah menjadi AS3):
private function acceleration(state:State, time:Number):Number
{
const k:int = 10;
const b:int = 1;
return - k*state.x - b*state.v;
}
membutuhkan massa konstan (10) dan gaya (1)? dan mengembalikan beberapa perhitungan aneh Saya tidak tahu mengapa ...- massa * posisi - kekuatan * kecepatan? apa?
Kemudian untuk sedikit kebingungan terakhir saya, dalam metode evaluasi yang terlihat seperti (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;
}
Kami menyimpan status baru dengan langkah waktu, lalu menetapkan turunan untuk kembali ... Saya agak memahami ini karena digunakan dalam proses perkiraan, tapi apa ini !:
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.
Kami mengatur perubahan output turunan di posisi ke status kecepatan baru? Hah?
Terakhir simulasi tes ini berjalan dengan melakukan ini:
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;
}
Jadi kita menetapkan negara baru dengan nilai posisi 100, dan kecepatan 0? Apa gunanya simulasi ini jika kita tidak memiliki kecepatan ...
Ngomong-ngomong, tak perlu dikatakan aku cukup bingung dan telah meninggalkan planet Bumi. Berharap seseorang di luar sana bisa menjelaskan ini untuk saya.