Saya mengalami masalah dengan penghindaran tabrakan yang tidak selaras dengan apa yang saya pikir merupakan kasus yang jarang terjadi. Saya telah menetapkan dua objek untuk bergerak ke arah satu sama lain tetapi dengan sedikit offset, sehingga salah satu objek bergerak sedikit ke atas, dan salah satu objek bergerak sedikit ke bawah.
Dalam algoritma kemudi menghindari tabrakan yang tidak selaras, saya menemukan titik pada garis depan objek dan garis depan objek lain di mana kedua garis ini adalah yang paling dekat. Jika titik-titik terdekat ini berada dalam jarak penghindaran tabrakan, dan jika jarak di antara mereka lebih kecil dari dua jari-jari dari bola bidang dua benda, maka benda-benda tersebut harus menjauh ke arah yang tepat.
Masalahnya adalah bahwa untuk kasus saya, titik terdekat pada garis dihitung sangat jauh dari titik tumbukan yang sebenarnya. Ini karena dua garis maju untuk setiap objek bergerak menjauh dari satu sama lain ketika benda berlalu. Masalahnya adalah karena hal ini, tidak ada kemudi yang terjadi, dan kedua benda itu bertabrakan sebagian.
Adakah yang punya saran tentang bagaimana saya bisa menghitung titik tumbukan dengan benar? Mungkin dengan mempertimbangkan ukuran kedua benda itu?
sumber
Jawaban:
Sejauh ini, ini adalah artikel pendeteksi tabrakan bola ke bola terbaik yang pernah saya temui.
Pelajaran Pool Hall: Cepat, Deteksi Tabrakan Akurat Antara Lingkaran atau Lingkaran
sumber
Anda tidak ingin menemukan titik terdekat.
Anda ingin menemukan titik pada garis di mana jaraknya sama dengan jari-jari gabungan kedua bola.
sumber
Jika saya memahami pertanyaan Anda dengan benar, Anda cukup menggunakan tes persimpangan Sphere vs Sphere, seperti yang disarankan AttackingHobo.
Matematika untuk melakukan tes seperti itu adalah sebagai berikut (koreksi saya jika saya salah, sudah beberapa saat). Juga, ini mempertimbangkan bahwa bola Anda masing-masing memiliki variabel pusat dan radius.
Rumus untuk memeriksa berjalan seperti ini:
Anda memiliki persimpangan sphere vs sphere. Ini cukup sederhana, mari kita lihat seperti apa itu dalam kode!
Sekali lagi, saya pikir ini adalah jawaban yang benar yang mungkin Anda cari. Jika ada yang tahu bahwa ini salah, tolong perbaiki saya, karena sudah lama sejak saya melakukan matematika ini.
sumber
Ok, semoga ini masuk akal ... Dapatkan vektor bola dan hitung titik tumbukannya, sebut ini p1. Temukan sudut antara 2 vektor, sebut ini a1. Pada a1 / 2 menggambar garis, ini akan berada di tengah tepat dalam derajat antara dua vektor. Anda memerlukan lokasi pada baris ini di mana sin (a1 / 2) = (radius1 + radius2) / 2. Jika gambar ini divisualisasikan di kepalaku, di sinilah tabrakan terjadi. Maaf jika ini salah ... terlambat.
sumber