정적 객체와 이동 가능한 객체가 있습니다. 충돌은 분리 축 정리를 사용하여 감지됩니다.
예를 들어,이 상황에서는 두 개의 정적 객체 (빨간색)가 있습니다.
및 둘 사이의 이동 가능한 물체 :
내 알고리즘은이 두 개체 간의 충돌을 계산할 수 있으며 충돌에 대한 완벽한 해상도 벡터 (최소 변위 벡터를 의미)를 뱉어냅니다.
예를 들어 녹색 사각형과 오른쪽 빨간색 사각형 사이의 충돌을 확인하면 알고리즘이 충돌을 해결하기 위해 녹색 사각형을 이동하는 방법을 알려주는 벡터를 뱉어냅니다.
MSPaint 에서이 그림을 빨리 그렸습니다. 그래서 그림에서 최소 변환 벡터가 맨 위에 녹색 사각형을 밀어 넣을 수는 있지만 여기서 왼쪽으로 밀어내는 것으로 가정합니다. 오른쪽이 실제로 더 짧습니다.
이에 접근하는 일반적인 방법은 한 번에 한 프레임이 아닌 프레임 당 한 번의 충돌 만 해결하는 것입니다. 그러나 제 경우에는 플립 플롭이 발생합니다.
먼저, 솔버는 두 개의 충돌을 감지하지만 오른쪽 사각형과 녹색 사각형 사이의 충돌 만 해결합니다.
그런 다음 다음 프레임에서 왼쪽 빨간색 사각형과 녹색 사각형 사이의 충돌이 하나만 감지되어 해결됩니다.
보시다시피, 이것은 실제로 충돌을 해결하지 않으며 (예를 들어 녹색 사각형을 맨 위로 밀어서) 두 상태 사이에서 무한대로 플립합니다.
이 문제를 어떻게 해결할 수 있습니까?