게임상에서 가장 기본적인 충돌검사는 사각, 원, 선 검사라고 생각한다
왜냐하면 이 세가지의 개념을 조합하면 좀더 정밀한 다각형, 픽셀 검사를 할수 있기 때문이다
여기서는 단순하게 원형끼리의 검사를 살펴보겠다
원은 한점에서 일정거리 만큼의 영역을 가지는 도형이다
그래서 두 원의 영역이 겹치는 조건은 중심점끼리의 거리로 판단한다.

위와 같이 중심점 사이의 거리가 두 반지름의 합보다 크면 서로 떨어져 있는 것이다.
두점 사이의 거리는 중3때 배우는 공식을 사용하면 된다 (http://mathbang.net/138)

반대의 경우로 중심점 거리가 반지름의 합보다 작아지면 겹치게 된다.
즉, 이때가 충돌한 것이다.

충돌이긴 한데..
완전히 겹치는, 다시 말해 한 원에 완전히 포함되는 경우는 반지름의 차로 계산한다.
거리가 반지름의 차보다 작으면 그런 경우이다.
이때, 당연히 반지름이 더 큰 원이 작은 원을 포함하게 되는것이다.
지금까지 살펴본 개념을 소스로 표현해 보자.
public static final int RESULT_FALSE = 0;
public static final int RESULT_TURE = 1;
public static final int RESULT_PERFECT_1 = 2;
public static final int RESULT_PERFECT_2 = 3;
public int checkCircles(float x1, float y1, float r1, float x2, float y2, float r2) {
//두 원의 중심점 사이의 거리를 구함
float dx = x2 - x1;
float dy = y2 - y1;
float distance = (float)Math.sqrt((dx * dx) + (dy * dy));
//중심점 사이의 거리와 두 원의 반지름 길이 비교
if(distance <= r1 - r2) //반지름 차보다 작고 원1이 더 클때
return RESULT_PERFECT_1; //원1 안에 원2가 있음
else if(distance <= r2 - r1) //반지름 차보다 작고 원2가 더 클때
return RESULT_PERFECT_2; //원2 안에 원1이 있음
else if(distance <= r1 + r2) //반지름 합보다 작을때
return RESULT_TURE; //일부가 겹침
return RESULT_FALSE; //반지름 합보다 클때 겹치지 않음
}
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)

https://meorimal.com/index.html?tab=spaceship
우주선 - 방치형 인공지능 투자 체험기
미리 맛보는 인공지능 투자!
(주)머리말 meorimal.com
https://meorimal.com/subway.html
지하철어디있니
더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.
(주)머리말 meorimal.com
'개발 > android' 카테고리의 다른 글
버튼의 Selector 이미지를 간절히 가져오고 싶다면? (0) | 2016.03.28 |
---|---|
일반뷰를 맵뷰처럼 밀어서 스크롤 시키기 (2) | 2016.02.29 |
알기 쉬운 안드로이드의 방위각 (0) | 2015.12.28 |
Bitmap 이미지를 byte로 바로 보낸다고? 그것도 소켓으로? (2) | 2015.11.30 |
이미지를 싹뚝 자를때 꼭 알아야 할 비밀 (0) | 2015.10.26 |