Separating Axis Theorem(SAT)충돌처리 구현

2022. 1. 12. 19:32DirectX

크기가 바뀌어도, 회전을 하더라도 잘 작동한다

DirectX11을 이용해 제작했다

 

Separating Axis Theorem에 대해 간략하게 알아보고 끝내도록 하자

두 도형 AB가 있다 이때 한 도형의 변에 평행하는 가상의 선을 하나 그어준다

그 후 가상의 선에 직교하는 선을 하나 그어준다

 

이 직교하는 선을 선분 L 이라고 부르자

 

그후 두 도형에 위 그림에서 초록색 선으로 보이는 벡터을 찾아주자(이 벡터을 뭐라고 불러야 할지를 모르겠다 하지만 이 벡터의 길이는 이 도형을 선분 L에 투영시켰을때의 길이의 절반이다)

그후 두 벡터을 선분 L에 투영시켜주자

이 투영시킨 벡터의 길이를 각각 ra, rb라고 불러주자

그 이후에는 도형 a의 중심에서 도형 b의 중심으로 가는 벡터를 하나 만들어준다

 

 

이를 벡터 t 라고하자 이제 이 벡터 t를 L에 투영시켜준다.

 

이렇게 distance를 구해주자 이제 구해야할건 모두 구했다 이제 충돌 여부만 보면된다

distance >= ra + rb일경우 충돌하지 않은경우이고

distance < ra + rb일경우 충돌한 것이다

이를 모든 변에 대해서 탐색해주면 충돌을 감지할 수 있다

'DirectX' 카테고리의 다른 글

충돌 연산  (0) 2022.01.14
Separating Axis Theorem(SAT)충돌 처리 구현(2_MTV)  (0) 2022.01.14