Untuk permainan biliar sederhana di mana spin tidak dimodelkan, algoritma ini cukup sederhana.
- Untuk memeriksa apakah tabrakan terjadi, periksa apakah jarak antara bola lebih kecil dari jumlah jari-jarinya.
- Hitung dampak normal
- Hitung gaya tumbukan berdasarkan perbedaan kecepatan, normal, koefisien tumbukan dan massa
- Terapkan gaya tumbukan ke kedua bola
Dalam kode semu ini menjadi:
vector difference = ball2.position - ball1.position
float distance = sqrt(difference)
if (distance < ball1.radius + ball2.radius) {
vector normal = difference / distance
//vector velocityDelta = ball2.velocity - ball1.velocity
vector velocityDelta = ball1.velocity - ball2.velocity
float dot = dotProduct(velocityDelta, normal)
if (dot > 0) {
float coefficient = 0.5
float impulseStrength = (1 + coefficient) * dot * (1 / ball1.mass + 1 / ball2.mass)
vector impulse = impulseStrength * normal
ball1.velocity -= impulse / ball1.mass
ball2.velocity += impulse / ball2.mass
}
}
Anda dapat menghilangkan massa dari algoritme jika semua bola memiliki massa yang sama dan juga mengasumsikan jari-jari konstan untuk semua bola untuk permainan pool, tetapi kode akan lebih berguna bagi Anda tanpa penyederhanaan tersebut.
Kode ini didasarkan pada tutorial ini , tetapi saya ingat bahwa perkalian impuls tidak benar di sana.