Statik nesnelerim ve hareketli nesnelerim var. Çarpışmalar, ayırma ekseni-teoremi kullanılarak tespit edilir.
Örneğin, bu durumda iki statik nesnem var (kırmızı):
ve ikisi arasında hareketli bir nesne:
Algoritmam bu nesnelerden ikisi arasındaki çarpışmayı hesaplayabilir ve ayrıca çarpışmaya mükemmel bir çözünürlük vektörü (minimum yer değiştirme-vektör anlamına gelir) verir.
Yani, örneğin, yeşil dikdörtgen ve sağ kırmızı dikdörtgen arasındaki çarpışmayı kontrol ettiğimde, algoritma bana çarpışmayı çözmek için yeşil dikdörtgeni nasıl hareket ettirmem gerektiğini söyleyen bir vektör verir:
Bunu hızlı bir şekilde MSPaint'te çizdiğime dikkat edin, bu resimde aslında minimum çeviri vektörünün yeşil dikdörtgeni üste doğru itmesi olabilir, ancak burada sola / aslında hakikaten daha kısadır.
Buna yaklaşmanın genel yolu, bir kerede değil, her kare başına bir çarpışmanın çarpışmasını çözmek olacaktır. Ama benim durumumda, bu flip-flopping ile sonuçlanır:
İlk olarak, çözücü iki çarpışmayı algılar, ancak yalnızca sağ dikdörtgen ile yeşil dikdörtgen arasındaki çarpışmayı giderir:
Ardından, sonraki karede, sol kırmızı dikdörtgen ile yeşil dikdörtgen arasındaki yalnızca bir çarpışma algılar ve çözer:
Gördüğünüz gibi, bu aslında çarpışmayı çözmez (örneğin yeşil dikdörtgeni yukarıya doğru iterek) ve bunun yerine iki durum arasındaki flopları sonsuz bir şekilde çevirin.
Bunu Nasıl Çözebilirim?