Benda bergerak bertabrakan saat menggunakan penghindaran tabrakan (kemudi) yang tidak selaras


9

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.

Tangkapan layar objek garis depan.

Adakah yang punya saran tentang bagaimana saya bisa menghitung titik tumbukan dengan benar? Mungkin dengan mempertimbangkan ukuran kedua benda itu?


Perhatikan bahwa dalam tangkapan layar, garis hijau, merah dan biru hanyalah sumbu dunia 3D.
James Bedford

Jawaban:


6

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


Saya tahu bagaimana melakukan uji tabrakan bola-bola. Masalah saya adalah mencoba menemukan posisi di mana tabrakan ini akan terjadi di masa depan. Terima kasih.
James Bedford

@James artikel itu akan menyelesaikan masalah Anda. Lihat halaman 2 dan Anda dapat menggunakan angka tinggi sembarang untuk "kecepatan" di salah satu bola Anda untuk menentukan titik tumbukan "di masa depan".
Tetrad

Ok - maaf karena tidak memeriksanya, itu terlihat cukup bagus! Saya harus kembali kepada Anda setelah saya membacanya. Terima kasih :)
James Bedford

1
Bisakah saya mengklarifikasi bahwa pada halaman 2 di bawah bagian "Bank Shot: Tabrakan antara dua lingkaran bergerak", itu berarti bahwa Anda harus menggunakan perbedaan antara kecepatan dua lingkaran dalam algoritma alih - alih kecepatan lingkaran pertama? (Kecepatan lingkaran kedua tidak digunakan dalam versi diam dari algoritma.) Bit ini tidak begitu jelas bagi saya. Terima kasih.
James Bedford

0

Anda tidak ingin menemukan titik terdekat.

Anda ingin menemukan titik pada garis di mana jaraknya sama dengan jari-jari gabungan kedua bola.


Ah ... baiklah! Apakah Anda tahu bagaimana saya bisa mengetahui ini secara matematis ..?
James Bedford

0

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:

distanceOfSpheres <= sumOfRadii^2

Anda memiliki persimpangan sphere vs sphere. Ini cukup sederhana, mari kita lihat seperti apa itu dalam kode!

bool sphereIntersectTest(BoundingSphere* s1, BoundingSphere* s2)
{
   Vector3 distance;

   // Get the distance between each sphere, center is a Vector3 type
   distance = (s1->center - s2-> center);

   // Determine the sum of both radii
   float radii = (s1->radius + s2->radius);

   // Determine if we have an intersection
   if (distance.length <= (radii * radii))
      return true;
   else
      return false;
}

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.


Saya tahu bagaimana melakukan uji tabrakan bola-bola. Masalah saya adalah mencoba menemukan posisi di mana tabrakan ini akan terjadi di masa depan. Terima kasih.
James Bedford

0

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.

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.