Pertama-tama untuk menghitung deteksi tabrakan antara bola (lingkaran dalam 2D) dan garis yang Anda butuhkan untuk menghitung vektor tegak lurus antara pusat bola yang bergerak dan garis, untuk menghitung jarak ini, Anda perlu melakukan hal berikut:
Jadi untuk menghitung d pada gambar di atas kita perlu melakukan beberapa langkah.
- Asumsikan garis Anda menggunakan parametrik persamaan P (t) = S + t V catatan V adalah arah garis dapat diperoleh dengan mengurangkan (P2 - P1).
- Dari Pythagoras:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Kemudian Anda perluas persamaan untuk mendapatkan yang berikut ini, sepertinya sedikit rumit tetapi sebenarnya tidak.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) dot V ) ^ 2 / V ^ 2)
Di mana Q adalah pusat lingkaran dan S adalah titik mana pun di garis. Setelah jaraknya kurang dari radius lingkaran / bola Anda harus memicu respons tabrakan yang dijelaskan pada titik berikutnya.
Tidak benar untuk selalu membalik komponen x atau y untuk memantulkan bola, yang perlu Anda lakukan adalah merefleksikan vektor kecepatan, untuk melakukannya, Anda perlu menghitung vektor Normal permukaan dan menggunakannya normal untuk menghitung refleksi. vektor menggunakan persamaan berikut
R = 2 * ( V dot N ) * N - V
di mana R adalah vektor refleksi, N adalah normal dari permukaan dan V adalah vektor Velocity.
Dalam kasus 45 deg permukaan Anda normal akan menjadi N = (1,1,0) dengan tanda bervariasi tergantung pada arah mana wajah normal (posisi atau negatif).