Sanırım burada olduğu gibi SAT uygulayarak yuvarlak bir deliğe kare bir anahtar takmaya çalışıyor olabilirsiniz. Açıkçası, içbükey-içbükey çarpışmalar için tasarlanmamıştır ve bunu bu amaç için uyarlamak için çaba harcadığım halde, bunu işe yaramaz hale getiren düşünceler var.
gerçekçilik
Açısal dürtü ve devirme efektleri burada oyunun adıdır.
Temas noktalarının sırası, gerçekçi çarpışma çözümü için önemlidir. Gerçek dünyada, bu noktalardan biri her zaman diğerinden önce vuracaktır. Ve sadece o temas sırasını ve bununla temsil edilen her "alt çarpışma" nın sonuçlarını taklit ederek, simülasyonda gerçekçi bir sonuç elde etmeyi bekleyebilirsiniz. Bu, ilk önce içbükeyinizi dışbükeyde parçalamanızın nedenlerinden biridir - ilk önce hangi parçanın vurulduğunu parçalı olarak tespit etmenizi sağlar. Tabii ki, bu da benim "Az gerçekçilik" başlığı altındaki yorumuma göre taklit edilebilir.
Dışbükey fikstürleriniz, nesneye hem anahat hem de sentroidini vermek için birleşir (ve elbette daha karmaşık simülasyonlarda, her fikstür de yoğunluğu farklı şekilde etkileyebilir). Bundan bahsetmemin sebebi, çarpışmaları gerçekçi bir şekilde çözerken, temas noktalarınızın her bir "alt çarpışmasını" takiben sadece lineer değil, aynı zamanda açısal dürtü de hesaplamanız gerekecek. SAT ile uyguladığınız temel "itme" kadar basit değildir.
Bu, probleminizin doğasını tamamen değiştirir, çünkü gördüğünüz gibi, 2 veya daha fazla temas noktası kullanmak ve kullanmak anlamsızdır , çünkü gerçekten önemli olan ilk şeydir. Daha sonra ilkini doğrusal ve açısal dürtü açısından çözdükten sonra, daha fazla çarpışma için yeniden hesaplamanız gerekir, çünkü her nesnenin yönleri değişmiş olacaktır. Ayrıca, adımdaki her bir tekil temasın algılanmasının aynı adımda yapılması gerekebilir veya gerekmeyebilir - nesnelerin ilk temas noktası dokunduğunda temaslar arasındaki zamanlamaya bağlı olarak, müteakip doğrusal ve açısal dürtü uygulanır, ikinci olarak temas noktası dokunur vb.
Daha az gerçekçilik
Tabii ki, açısal dürtü için çözmekle ilgilenmediğinizi varsayarsak, SAT ile yapabileceğiniz en iyi şey, bu çokgenleri Graham'ın Taraması gibi bir şey kullanarak dışbükey olarak sararsanız tam olarak ne yapacağınız olur: Tek ayırma ile birbirinden ayırmak vektör. Başka bir deyişle, gösterdiğiniz gibi, üç vektörü birlikte çözmeye çalışmak pek mantıklı değildir. Önemli olan en büyük grup.
Sorunuza yanıt olarak DÜZENLE
Basit bir yaklaşım istiyorsanız yapmanız gereken şudur:
Doğru yer değiştirme yönünü belirleyin . Bu en kolay şekilde her biri dışbükey gövde ve normalleri ayırma eksenine belirleyerek yapılır.
Şimdi deplasman büyüklüğünü belirlemelisiniz . Neden SAT tarafından verilen büyüklüğü kullanamıyoruz? Çünkü düşünürseniz, içbükeylik derinlikleri dışbükey gövdeler için potansiyel olarak içbükey gövdeleri için olduğundan daha büyük olacaktır - birbirleriyle dişleri olan iki E'yi düşünün! Yukarıda yaptığınız gibi, belirli bir adım için tüm temas noktalarını bulun, ancak bunları eksen normallerine paralel olarak bulun , çünkü bu doğru yer değiştirme yönüdür. Şimdi bu paralel örtüşme vektörlerinden hangisinin en uzun olduğunu belirleyin. Birini atın, gerisini atın ve bir sonraki fizik adımına geçin.