나는 당신이 여기있는 방식으로 SAT를 적용하여 사각형 키를 둥근 구멍에 맞추려고 노력하고 있다고 생각합니다. 분명히, 그것은 오목한 오목한 충돌을 위해 고안된 것이 아니며, 그 목적에 맞게 수정하려는 당신의 노력을 칭찬하지만, 이것이 효과가 없을 것 같은 고려 사항이 있습니다.
실재론
각 임펄스와 노크 효과는 게임의 이름입니다.
접점의 순서는 현실적인 충돌 해결에 중요합니다. 실제로는 그 중 하나가 항상 다른 점보다 먼저 닥칠 것입니다. 그리고 접촉 순서와 그로 표현 된 각 "하위 충돌"의 결과를 모방하는 것만으로도 시뮬레이션에서 현실적인 결과를 얻을 수 있습니다. 이것이 처음에 오목한 부분을 볼록한 부분으로 분류하는 이유 중 하나입니다. 어떤 부분이 먼저 부딪 쳤는지 부분적으로 감지 할 수 있습니다. 물론 이것은 "Less realism"이라는 제목 아래의 나의 의견에 따라 모방 될 수도있다.
볼록한 고정구가 결합되어 개체의 윤곽과 중심을 모두 제공합니다 (물론 복잡한 시뮬레이션에서는 각 고정구가 밀도에 다르게 영향을 줄 수 있음). 내가 이것을 언급 한 이유는 사실적으로 충돌을 해결할 때 접점의 각 "하위 충돌"에 따라 선형뿐만 아니라 각 임펄스도 계산해야하기 때문입니다. SAT로 적용하는 기본 "푸시 분리"만큼 간단하지 않습니다.
그러면 문제의 본질이 완전히 바뀝니다. 보시다시피 2 개 이상의 접점 을 사용 하는 것은 무의미합니다. 실제로 중요한 것은 첫 번째 접점이기 때문입니다. 선형 및 각도 임펄스 측면에서 첫 번째를 해결 한 후에는 각 객체의 방향이 변경되므로 추가 충돌을 위해 다시 계산해야합니다. 또한, 단계에서 각각의 개별 접촉을 검출하는 것은 동일한 단계 내에서 수행 될 필요 가 있거나 필요 하지 않을 수있다-물체의 제 1 접촉점이 접촉 할 때의 접촉 사이의 타이밍에 따라, 후속 선형 및 각 임펄스가 적용되고, 두번째 접점 접촉 등.
덜 사실감
물론, 각도 임펄스를 해결하는 데 전혀 관심이 없다고 가정하면 SAT로 할 수있는 최선은 Graham의 스캔과 같은 것을 사용하여 이러한 다각형을 볼록하게 감싼 경우와 정확히 일치합니다. 단일 분리로 분리 벡터. 다시 말해, 시연 한 것처럼 세 개의 벡터를 함께 해결하려고 시도하는 것은 의미가 없습니다. 그것은 무리에서 가장 큰 것입니다.
질문에 대한 답변으로 수정
간단한 접근 방식을 원할 경우해야 할 일은 다음과 같습니다.
올바른 변위 방향 을 결정하십시오 . 이것은 각각 볼록한 헐링과 분리 축에 대한 법선을 결정함으로써 가장 쉽게 수행됩니다.
이제 변위 크기 를 결정해야합니다 . SAT에서 제공 한 크기 만 사용할 수없는 이유는 무엇입니까? 당신이 그것에 대해 생각하면, 상호 침투 깊이는 볼록 껍질에 대해 잠재적으로 더 커질 것입니다. 일치하는 오목 껍질에 대한 것보다-두 개의 E가 서로 이빨에 있다고 생각하십시오! 위에서 한 것처럼 주어진 단계에 대한 모든 접점을 찾으 되 올바른 변위 방향이기 때문에 축 법선 과 평행 한 것을 찾으십시오 . 이제이 병렬 오버랩 벡터 중 가장 긴 것이 무엇인지 결정하십시오. 그 하나를 대체하고 나머지는 버리고 다음 물리 단계로 진행하십시오.