· GJK-EPA 알고리즘으로 플레이어를 밀어내는 오브젝트 만들기
· 분리축(SAT)충돌검사를 사용해서 밀어내는 오브젝트 만들기
· OBB충돌검사를 사용해서 밀어내는 오브젝트 만들기
· 원 충돌체크 & AABB충돌체크
· 벡터의 연산과 활용
· 극좌표계의 기본 연산들
· 점이 다각형에 포함되는지 구하기
· 점의 포함과 선분의 교차를 이용한 충돌체크
· 추격형 오브젝트 만들기
· 부드럽게 이동하는 오브젝트 만들기
· 링(고리) 모양의 충돌체크
· 원과 다각형의 충돌체크
· 부채꼴 모양의 충돌체크
· 갈고리 모양의 충돌체크
· 부채꼴과 갈고리의 충돌체크 영상
· 타원의 충돌체크
여러가지 연산들을 설명해놓은 글이에요
그리고 저도 잘 아는게 아니라 틀리거나 잘못된 내용이 있을수도 있어요
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. 겹쳐있는 두 선분을 밀어내기 위한 최소거리 구하기
위의 그림처럼 직선상에 두 선분이 주어져 있고, 두 선분의 최소 최대값이 각각 amn amx bmn bmx일때
우선 두 선분이 겹쳐져 있는지를 체크하려면 위의 그림의 첫번째 두번째에 나와있는 경우를 살펴보면 되요,
즉 amx < bmn 이거나 bmx < amn이면 두 선분은 서로 겹쳐지지 않아요
그리고 겹쳐진 두 선분을 서로 겹쳐지지 않을때까지 밀어내기 위한 최소 거리를 찾기 위해서는(여기서는 a선분을 고정시키고 b선분을 이동시켜요)
그림의 세번째 네번째에 나와있는 경우를 살펴보면 되요, 보라색은 bmx-amn 이고 b선분을 왼쪽으로 겹쳐지지 않을때까지 밀어내기 위한 거리에요
그리고 초록색은 amx-bmn이고 b선분을 오른쪽으로 겹쳐지지 않을때까지 밀어내기 위한 거리에요
즉, 둘중 더 값이 작은 방향으로 b선분을 이동시키면 되요, 다만 보라색이(왼쪽으로 이동) 더 작을 경우에는 -방향으로 이동시켜야 하니까 거리만큼 -방향으로 이동시켜야해요
2. 점과 각도를 수직이동시킨 위치 구하기
위의 그림처럼 직선상에 점 a와 b가 주어져 있을때, b를 a기준으로 수직이동시킨 점 c의 위치는, 즉 a에서 b와의 거리만큼 반대방향으로 떨어진 점 c의 위치는
c= 2*a-b로 구할수 있어요, 그리고 이건 그림에 나와있는것처럼 좌우 방향 모두에 적용할수 있어요
그리고 이 연산은 그림의 아래에 나와있는것처럼 각도를 수직이동(대칭이동) 시킬때도 사용될수 있어요, 역시 a각도를 기준으로 b각도를 수직이동시켜서 나온 각도가 c라면 이때 c는 2*a-b가 되요
3. 두 각도 사이의 각도 구하기
위의 그림처럼 각도 a와 b가 주어져 있을때 그 사이의 각도 c는
c = arccos(cos(a)*cos(b)+sin(a)*sin(b)) 로 구할수 있어요
그리고 이때 그 범위는 -180~+180도 범위 사이에서 나오게 되요
이건 벡터의 내적을 통한 사이의 각도를 구하는 방법을, 극좌표계의 거리와 각도 공식을 사용해서 두 각도가 주어진 경우로 변형한 거에요
4. 두 각도의 방향 구하기
위의 그림처럼 각도 a와 b가 주어져 있을때,
각도 b가 a를 기준으로 +방향에 있으면(그림의 왼쪽) cos(a)*sin(b)-sin(a)*cos(b) 가 0보다 크고
-방향에 있으면(그림의 오른쪽) cos(a)*sin(b)-sin(a)*cos(b) 가 0보다 작아요,
만약 cos(a)*sin(b)-sin(a)*cos(b) 가 0이라면 두 각도가 동일하거나 정반대방향(180도) 에 있는 경우에요
이건 벡터의 외적을 통한 방향체크를 극좌표계의 거리와 각도 공식을 사용해서 두 각도가 주어진 경우로 변형한 거에요
기초가 그 바탕이 되어야 해!