RK4, Derivatif, Memahami Fisika Game


8

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.


Jika game seperti yang Anda kejar, RK4 adalah kerja keras dan, karena rasio biaya vs stabilitas, bukan pilihan terbaik baik untuk perubahan tiba-tiba dan tajam dalam akselerasi Anda. Jika Anda mencari diskusi tentang jenis integrator mana yang pantas dipilih, serta bagaimana membangun simulator yang agak sederhana, saya dapat merekomendasikan laporan teknis tentang masalah-masalah ini: arxiv.org/pdf/1311.5018v1.pdf
teodron

1
Menarik, saya akan mengambil kopi dan membacanya! Secara pribadi, saya tertarik untuk memahami sebanyak mungkin dari simulasi dasar hingga lanjutan. Saya telah membuat beberapa yang sangat mendasar saat ini, tetapi ini murni pencarian pengetahuan sehingga saya dapat meningkatkan fleksibilitas saya sebagai pengembang. Terima kasih untuk referensi, sangat menghargainya!
Bennett Yeates

Jawaban:


6

RK4 adalah contoh integrator numerik . Integrasi Euler adalah konsep yang serupa, tetapi jauh kurang tepat. Integrasi numerik tidak tepat, tetapi jauh lebih baik bagi komputer untuk menangani dalam situasi waktu nyata seperti permainan. Alasan Anda menggunakan RK4 dan bukannya Euler adalah karena RK4 memperhitungkan integrasi turunan kedua dan ketiga (akselerasi dan brengsek), dan dengan demikian cocok dengan solusi analitis yang jauh lebih baik.

RK4 pada dasarnya adalah ekspansi deret persamaan deret Taylor yang mendefinisikan akselerasi sehubungan dengan perpindahan dan kecepatan. Ini memungkinkan Anda untuk mengintegrasikan kekuatan yang bergantung pada kuantitas ini, seperti dalam kendala dan bahkan gravitasi universal. Ekspansi seri Taylor berguna dalam pemrograman karena komputer dapat mengevaluasinya dengan sangat efisien.

The accelerationfungsi yang digunakan adalah contoh adalah sistem pegas sederhana teredam, tidak gravitasi. kadalah konstanta pegas Hooke, dan bdigunakan untuk meredam sistem (menghilangkan energi). Untuk hampir semua kendala terkait pegas di mesin Anda, Anda harus meredamnya karena kesalahan numerik dapat menyebabkan akumulasi energi yang sangat besar, menyebabkan simulasi meledak. Jika Anda menggunakan integrasi Euler, ini akan jauh lebih buruk.

Sehubungan dengan itu acceleration(), mesin fisika yang lebih lengkap akan menghitung percepatan linear dan sudut berdasarkan gaya (torsi). Gaya penjumlahan dapat mencakup gravitasi (konstan atau berdasarkan Gravitasi Universal), daya apung, dan pegas (sebagian besar kendala dapat dimodelkan menggunakan pegas kaku).

Pertanyaan ketiga Anda mudah dijawab. Dalam kinematika, ada tiga besaran dasar: perpindahan (posisi), kecepatan, dan akselerasi. Akselerasi adalah turunan dari kecepatan, yang merupakan turunan dari perpindahan (keduanya berkenaan dengan waktu). Turunan hanyalah tingkat perubahan sesuatu. Derivative.dxberarti "turunan dari State.x".

Karena simulasi mengasumsikan bahwa pegas berlabuh pada titik asal dan memiliki panjang istirahat nol, perpindahan 100 berarti bahwa partikel akan mulai berosilasi. Simulasi pengujian berakhir ketika partikel tidak bergerak dan dekat dengan asal.


Deskripsi lain adalah bahwa Anda dapat menganggap RK4 sebagai perluasan taylor ke persamaan diferensial.
RandyGaul

Ini adalah jawaban yang bagus dan benar-benar membuka beberapa lubang dalam pengetahuan fisika saya. Bisakah Anda memberikan beberapa referensi ke tempat awal yang baik untuk memahami apa sistem pegas teredam, torsi, dll? Saya yakin saya kurang dalam mekanika yang lebih maju ini. Jawaban Anda benar-benar mengklarifikasi bagi saya, terutama karena saya baru saja mulai ke polinomial Taylor.
Bennett Yeates

Saya akan coba di sini: khanacademy.org/science/physics
jmegaffin

Sempurna, khanacademy adalah tempat yang saya pikirkan.
Bennett Yeates
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.