Tôi có các đối tượng tĩnh và các đối tượng di chuyển. Các va chạm được phát hiện bằng định lý trục tách.
Ví dụ, trong tình huống này tôi có hai đối tượng tĩnh (màu đỏ):
và một đối tượng di chuyển giữa hai:
Thuật toán của tôi có thể tính toán va chạm giữa hai trong số các đối tượng này và nó cũng tạo ra một vectơ độ phân giải hoàn hảo (có nghĩa là vectơ chuyển vị tối thiểu) cho va chạm.
Vì vậy, ví dụ, khi tôi kiểm tra va chạm giữa hình chữ nhật màu xanh lá cây và hình chữ nhật màu đỏ bên phải, thuật toán sẽ tạo ra một vectơ cho tôi biết làm thế nào tôi cần di chuyển hình chữ nhật màu xanh lá cây để giải quyết va chạm:
Lưu ý rằng tôi đã nhanh chóng vẽ nó trong MSPaint, vì vậy trong bức ảnh đó thực sự có thể là vectơ dịch tối thiểu đẩy hình chữ nhật màu xanh lá cây lên trên cùng, nhưng tôi sẽ giả sử ở đây đẩy nó ra bên trái / đúng là thực sự ngắn hơn.
Cách chung để tiếp cận điều này sẽ là chỉ giải quyết va chạm của một vụ va chạm trên mỗi khung hình, thay vì tất cả cùng một lúc. Nhưng trong trường hợp của tôi, điều này sẽ dẫn đến lật kèo:
Đầu tiên, bộ giải phát hiện hai va chạm nhưng chỉ giải quyết va chạm giữa hình chữ nhật bên phải và hình chữ nhật màu xanh lá cây:
Sau đó, trong khung tiếp theo, nó chỉ phát hiện một va chạm nằm giữa hình chữ nhật màu đỏ bên trái và hình chữ nhật màu xanh lá cây và giải quyết nó:
Như bạn có thể thấy, điều này thực sự không giải quyết được sự va chạm (ví dụ bằng cách đẩy hình chữ nhật màu xanh lá cây lên trên cùng), và thay vào đó chỉ là lật đôi giữa hai trạng thái vô hạn.
Làm sao tôi có thể giải quyết việc này?