У мене є статичні об'єкти та рухомі об’єкти. Зіткнення виявляються за допомогою теореми, що розділяє вісь.
Наприклад, у цій ситуації у мене є два статичні об'єкти (червоним кольором):
і рухомий предмет між двома:
Мій алгоритм здатний обчислити зіткнення двох цих об'єктів, а також виплює ідеальний вектор роздільної здатності (маючи на увазі вектор мінімального зміщення) до зіткнення.
Так, наприклад, коли я перевіряю зіткнення між зеленим прямокутником і правим червоним прямокутником, алгоритм виплющує вектор, який підказує мені, як мені потрібно перемістити зелений прямокутник, щоб вирішити зіткнення:
Зауважте, що я просто швидко намалював це в MSPaint, так що на цій картині насправді могло бути так, що вектор мінімального перекладу виштовхує зелений прямокутник у верхній частині, але я припускаю тут, що висуваючи його ліворуч / право насправді коротше.
Загальним способом підходу до цього було б вирішити лише зіткнення одного зіткнення на кадр, а не всі відразу. Але в моєму випадку це призведе до перевертання:
По-перше, розв'язувач виявляє два зіткнення, але вирішує лише зіткнення між правим прямокутником і зеленим прямокутником:
Потім у наступному кадрі він виявляє лише одне зіткнення, яке знаходиться між лівим червоним прямокутником та зеленим прямокутником, і вирішує його:
Як бачите, це насправді не вирішує зіткнення (наприклад, виштовхуючи зелений прямокутник на вершину), а натомість просто нескінченно перевертає провалля між двома станами.
Як я можу це вирішити?