SAT를 사용하여 복합 모양의 충돌을 해결하는 방법은 무엇입니까?


16

SAT 는 임의의 볼록 다각형 사이의 충돌을 결정하는 적절한 방법입니다. 충돌을 해결하는 데 필요한 벡터를 얻을 수도 있습니다.

복잡한 (볼록하지 않은) 모양 사이의 충돌을 해결하기 위해 여러 볼록 다각형으로 구성된 일종의 복합 모양에 대해 생각하고있었습니다. 넓은 위상에서 충돌이 발생하면 (예 : 원 대 원 또는 AABB 대 AABB) 충돌은 복합 형태의 각 다각형 대 다른 복합 형태의 각 다각형을 확인하여 해결됩니다.

그래도 실제로 객체를 분리하는 가장 좋은 방법이 무엇인지 궁금합니다. 순진한 접근 방식은 가장 큰 크기의 벡터를 가져와 분리에 사용하는 것입니다. 다음 그림에서 이것은 V 2입니다.

SAT 예 1

그러나 분리 벡터가 다른 방향을 가리키면 충돌을 즉시 해결할 수 없으며 여러 번 반복해야 할 수도 있습니다. 다음 그림에서 우리는 V 1을 사용 하고 V 2에 의한 또 다른 반복에서 분리합니다 (또는 V 1 의 양만큼 모양이 움직였을 때 V 2에 가까운 무언가 ).

SAT 예 2

이 방법은 서로 반대 방향을 가리키는 벡터를 분리하거나 다음 그림과 같이 경우에 실패합니다.

SAT 예 3

여기서 우리는 왼쪽의 상태와 오른쪽의 상태를 끝없이 반복합니다.

따라서 실제 질문을하려면 :이 문제에 대한 합리적인 접근 방법은 무엇입니까? 복잡한 모양에 복합 다각형을 사용하는 것이 합리적이라고 생각하지만 그 경우 충돌을 어떻게 해결해야하는지 궁금합니다. 세 번째 이미지와 같이 막 다른 골목을 어떻게 감지합니까?


벡터를 사용하려는 대상을 명확히 할 수 있습니까?
Will

@Will 모양이 더 이상 겹치지 않도록 벡터를 사용하여 충돌을 해결해야합니다. 따라서 결과 벡터로 노란색 객체를 이동할 수 있고 두 객체가 더 이상 충돌하지 않습니다.
bummzack

답변:


7

나는 당신이 여기있는 방식으로 SAT를 적용하여 사각형 키를 둥근 구멍에 맞추려고 노력하고 있다고 생각합니다. 분명히, 그것은 오목한 오목한 충돌을 위해 고안된 것이 아니며, 그 목적에 맞게 수정하려는 당신의 노력을 칭찬하지만, 이것이 효과가 없을 것 같은 고려 사항이 있습니다.

실재론

각 임펄스와 노크 효과는 게임의 이름입니다.

접점의 순서는 현실적인 충돌 해결에 중요합니다. 실제로는 그 중 하나가 항상 다른 점보다 먼저 닥칠 것입니다. 그리고 접촉 순서와 그로 표현 된 각 "하위 충돌"의 결과를 모방하는 것만으로도 시뮬레이션에서 현실적인 결과를 얻을 수 있습니다. 이것이 처음에 오목한 부분을 볼록한 부분으로 분류하는 이유 중 하나입니다. 어떤 부분이 먼저 부딪 쳤는지 부분적으로 감지 할 수 있습니다. 물론 이것은 "Less realism"이라는 제목 아래의 나의 의견에 따라 모방 될 수도있다.

볼록한 고정구가 결합되어 개체의 윤곽과 중심을 모두 제공합니다 (물론 복잡한 시뮬레이션에서는 각 고정구가 밀도에 다르게 영향을 줄 수 있음). 내가 이것을 언급 한 이유는 사실적으로 충돌을 해결할 때 접점의 각 "하위 충돌"에 따라 선형뿐만 아니라 각 임펄스도 계산해야하기 때문입니다. SAT로 적용하는 기본 "푸시 분리"만큼 간단하지 않습니다.

그러면 문제의 본질이 완전히 바뀝니다. 보시다시피 2 개 이상의 접점 을 사용 하는 것은 무의미합니다. 실제로 중요한 것은 첫 번째 접점이기 때문입니다. 선형 및 각도 임펄스 측면에서 첫 번째를 해결 한 후에는 각 객체의 방향이 변경되므로 추가 충돌을 위해 다시 계산해야합니다. 또한, 단계에서 각각의 개별 접촉을 검출하는 것은 동일한 단계 내에서 수행 될 필요 가 있거나 필요 하지 않을 수있다-물체의 제 1 접촉점이 접촉 할 때의 접촉 사이의 타이밍에 따라, 후속 선형 및 각 임펄스가 적용되고, 두번째 접점 접촉 등.

덜 사실감

물론, 각도 임펄스를 해결하는 데 전혀 관심이 없다고 가정하면 SAT로 할 수있는 최선은 Graham의 스캔과 같은 것을 사용하여 이러한 다각형을 볼록하게 감싼 경우와 정확히 일치합니다. 단일 분리로 분리 벡터. 다시 말해, 시연 한 것처럼 세 개의 벡터를 함께 해결하려고 시도하는 것은 의미가 없습니다. 그것은 무리에서 가장 큰 것입니다.

질문에 대한 답변으로 수정

간단한 접근 방식을 원할 경우해야 할 일은 다음과 같습니다.

  • 올바른 변위 방향 을 결정하십시오 . 이것은 각각 볼록한 헐링과 분리 축에 대한 법선을 결정함으로써 가장 쉽게 수행됩니다.

  • 이제 변위 크기 를 결정해야합니다 . SAT에서 제공 한 크기 만 사용할 수없는 이유는 무엇입니까? 당신이 그것에 대해 생각하면, 상호 침투 깊이는 볼록 껍질에 대해 잠재적으로 더 커질 것입니다. 일치하는 오목 껍질에 대한 것보다-두 개의 E가 서로 이빨에 있다고 생각하십시오! 위에서 한 것처럼 주어진 단계에 대한 모든 접점을 찾으 되 올바른 변위 방향이기 때문에 축 법선 과 평행 한 것을 찾으십시오 . 이제이 병렬 오버랩 벡터 중 가장 긴 것이 무엇인지 결정하십시오. 그 하나를 대체하고 나머지는 버리고 다음 물리 단계로 진행하십시오.


무슨 말인지 알 것 같아 따라서 "현실감이 적은"시나리오에서는 개별 다각형에 대해 SAT에서 제공 한 (가장 짧은) 벡터를 평가할뿐만 아니라 다른 (더 큰) 겹침도 고려해야하고 최악의 경우 볼록 껍질을 사용해야합니까?
bummzack

(최신) 편집을 참조하십시오.
엔지니어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.