Yaptığım 2D oyunda bir çarpışma sistemi uygulamaya çalışıyorum. Ayırma ekseni teoremi ( metanet'in çarpışma öğreticisinde açıklandığı gibi), çarpışma algılamayı ele almanın etkili ve sağlam bir yolu gibi görünüyor, ancak kullandıkları çarpışma yanıtı yöntemini pek sevmiyorum. En az üst üste binme ekseni boyunca körü körüne yer değiştirerek, algoritma hareket eden nesnenin önceki konumunu göz ardı eder, yani durağan nesneye girdiği ve ardından dışarı çıktığı kadar çarpışmadığı anlamına gelir.
İşte bunun önemli olduğu bir duruma bir örnek:

Yukarıda açıklanan SAT yöntemine göre, dikdörtgen sadece hipotenüsüne dik olan üçgenden çıkar:

Bununla birlikte, gerçekçi olarak, dikdörtgen üçgenin sağ alt köşesinde durmalıdır, çünkü bu, yer değiştirme vektörü boyunca sürekli hareket ederse ilk çarpışma noktası olacaktır:

Şimdi, bu oyun sırasında aslında önemli olmayabilir, ancak bu şekilde etkili yer değiştirmelerin etkili ve genel olarak elde edilmesinin bir yolu olup olmadığını bilmek isterim. Beynimi son birkaç gündür raflara atıyorum ve henüz pes etmek istemiyorum!
(StackOverflow'dan yayınlanmıştır, umarım bu kurallara aykırı değildir!)
Adım 1: Her çokgen için, bu çokgenin hareket vektörüne dik çizgiye izdüşümü boyunca en uzak iki noktayı bulun.
Adım 2: Her bir çokgeni bu noktaları birleştiren çizgi boyunca bölün. Hareket vektörü boyunca diğer çokgene bakan çokgenin yarısı "ileri gövde" dir. Bu, çokgenin çarpışması muhtemel tek bölümüdür.
Aşama 3:Hareket vektörü boyunca her çokgenin "ileri gövdesi" üzerinde her noktadan bir vektörü zıt çokgene doğru yansıtın ve karşıt çokgenin "ileri gövdesi" nin her bir kenarı ile kesişme kontrolü yapın. (Muhtemelen yavaş, ama bugünlerde bilgisayarlar oldukça hızlı - değil mi?) (Eğik ok için üzgünüm. Tüm oklar paralel olmalıdır.)
Adım 4: En kısa vektörü alın. Bu tam çarpışma mesafesi.
Adım 5: Voila!
