Mam obiekty statyczne i ruchome. Zderzenia są wykrywane za pomocą twierdzenia o osi oddzielającej.
Na przykład w tej sytuacji mam dwa obiekty statyczne (na czerwono):
i ruchomy obiekt między nimi:
Mój algorytm jest w stanie obliczyć kolizję między dwoma z tych obiektów, a także wyrzuca wektor doskonałej rozdzielczości (co oznacza wektor minimalnego przemieszczenia) na kolizję.
Na przykład, kiedy sprawdzam kolizję między zielonym prostokątem a prawym czerwonym prostokątem, algorytm wyrzuca wektor, który mówi mi, jak muszę przesunąć zielony prostokąt, aby rozwiązać kolizję:
Zauważ, że właśnie szybko narysowałem to w MSPaint, więc na tym zdjęciu może być tak, że wektor minimalnego tłumaczenia wypycha zielony prostokąt na górę, ale zakładam tutaj, że wypycham go w lewo / prawo jest w rzeczywistości krótsze.
Ogólnym sposobem podejścia do tego byłoby rozwiązanie kolizji tylko jednej kolizji na ramkę, zamiast wszystkich naraz. Ale w moim przypadku spowodowałoby to przerzucanie:
Po pierwsze, solver wykrywa dwie kolizje, ale rozwiązuje tylko kolizję między prawym prostokątem a zielonym prostokątem:
Następnie w następnej ramce wykrywa tylko jedną kolizję między lewym czerwonym prostokątem a zielonym prostokątem i rozwiązuje go:
Jak widać, tak naprawdę nie rozwiązuje to kolizji (na przykład wypychając zielony prostokąt do góry), a zamiast tego po prostu nieskończenie przerzuca klapy między dwoma stanami.
Jak mogę to rozwiązać?