2D 게임 에서 원형 과 사각형 충돌 검출
2.bool OverLap(RECT round, RECT rect)
3.{
4.int cr = (round.right - round.left)/2;
5.int cx = round.left + cr;
6.int cy = round.top + cr;
7.int distanceX = abs(cx - rect.left - (rect.right-rect.left)/2);
8.int distanceY = abs(cy - rect.top - (rect.bottom-rect.top)/2);
9.if(distanceX > ((rect.right-rect.left)/2 + cr)) return false;
10.if(distanceY > ((rect.bottom-rect.top)/2 + cr)) return false;
11.if(distanceX <= (rect.right-rect.left)/2) return true;
12.if(distanceY <= (rect.bottom-rect.top)/2) return true;
13.int sq = (distanceX-(rect.right-rect.left)/2)*(distanceX-(rect.right-rect.left)/2) +
14.(distanceY-(rect.bottom-rect.top)/2)*(distanceY-(rect.bottom-rect.top)/2);
15.return (sq <= cr*cr);
16.}
쉽게 알 수 있 을 것 이다. 함수 가 입력 한 것 은 두 개의 사각형 이 고 전 자 는 원 을 그 리 는 외 접 사각형 이 며 후 자 는 부 딪 히 는 사각형 이다.
코드 를 간단하게 분석 해 보 세 요.
2.int cr = (round.right - round.left)/2;
3.int cx = round.left + cr;
4.int cy = round.top + cr;
면 의 몇 줄 코드 는 원 의 반지름 과 원심 을 구하 기 위해 서 이다.
1.int distanceX = abs(cx - rect.left - (rect.right-rect.left)/2); int distanceY = abs(cy - rect.top - (rect.bottom-rect.top)/2);
다음 두 줄 의 코드 는 사실 원심 과 사각형 중심의 거 리 를 구 하 는 것 이다.첫 번 째 줄 은 가로 좌표 의 거리 이 고, 두 번 째 줄 은 세로 좌표 의 거리 이다.
2.if(distanceX > ((rect.right-rect.left)/2 + cr)) return false;
3.if(distanceY > ((rect.bottom-rect.top)/2 + cr)) return false;
이 두 줄 은 눈 에 띄 는 상황 을 제외 하고 사실은 그림 의 중간 에 큰 사각형 외부의 모든 범위 이다.첫 번 째 문장 은 원형 에서 직사각형 X 좌표 까지 의 거리 가 양자 반경의 누적 보다 크다 는 것 을 나타 내 고 그림 의 회색 선 양쪽 의 범 위 를 배제한다.두 번 째 말 은 두 개의 파란색 선 이외 의 범 위 를 배출 하고 두 가 지 를 결합 하면 중간 에 큰 사각형 범위 가 남는다.
1.if(distanceX <= (rect.right-rect.left)/2+r) return true;
2.if(distanceY <= (rect.bottom-rect.top)/2+r) return true;
다음은 뻔 한 충돌 상황 이다.직사각형 상하 좌우 의 충돌 을 측정 하기 위해 서다.구 성 된 도형 은 그림 의 분홍색 선 으로 둘러싸 인 십자 형 이다.이 두 문장 을 여기에 두 는 것 은 필수 적 이다.위의 두 마디 말 을 결합 하여 구 성 된 것 은 작은 십자 형 으로 직사각형 상하 좌우 의 충돌 상황 을 검사 할 수 있다.충돌 검출 모양 이 이 모양 입 니 다:
마지막 두 마디 코드:
1.
2.int sq = (distanceX-(rect.right-rect.left)/2)*(distanceX-(rect.right-rect.left)/2) + (distanceY-(rect.bottom-rect.top)/2)*(distanceY-(rect.bottom-rect.top)/2);
3.return (sq <= cr*cr);
아주 단순 하 게 사각형 의 네 구석 이 부 딪 히 는 것 을 검사 하 는 것 이다.방법 은 직사각형 과 원형의 거리의 제곱 과 원 의 반지름 의 제곱 의 크기 관 계 를 검사 하 는 것 이다.
만약 에 위 에 있 는 네가 잘 모 르 면 괜찮아. 내 가 이 알고리즘 으로 DEMO 를 썼 으 니 테스트 를 다운로드 한 다음 에 알고리즘 의 모든 문 구 를 주석 하여 검 측 하고 문장의 역할 을 보면 그때 알 게 될 거 야.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.