728x90

원 A : 중심 x1, y1 반지름 r1
원 B : 중심 x2, y2 반지름 r2
원 A와 원 B 두 원의 위치관계를 묻는 문제이다.
두원의 위치관계는 총 6가지가 있다.
1) 두 점에서 만나는 경우
2) 한 점에서 만나는 경우 - 내접
3) 한 점에서 만나는 경우 - 외접
4) 만나지 않는 경우 - 외부에 있을 때
5) 만나지 않는 경우 - 내부에 있을 때
6) 동심원
import java.util.Scanner;
public class Turret {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int T = in.nextInt();
while(T-- > 0) {
int x1 = in.nextInt();
int y1 = in.nextInt();
int r1 = in.nextInt();
int x2 = in.nextInt();
int y2 = in.nextInt();
int r2 = in.nextInt();
System.out.println(CalPoint(x1, y1, r1, x2, y2, r2));
}
}
public static int CalPoint(int x1, int y1, int r1, int x2, int y2, int r2) {
int result = 0;
int addR = r1 + r2; //두 원의 반지름의 합
int subR = r1 - r2; //두 원의 반지름의 차
addR = addR * addR; //두 원의 반지름의 합 제곱
subR = subR * subR; //두 원의 반지름의 차 제곱
int distX = x1 - x2;
int distY = y1 - y2;
//두 점 사이의 거리 제곱
int dist = (distX * distX) + (distY * distY);
if(dist < addR && dist > subR) {
result = 2;
}
//외접 내접
else if(dist == addR || (dist == subR && dist != 0)) {
result = 1;
}
else if(dist < subR || dist > addR) {
result = 0;
}
else if(dist == 0) {
//동심원
if(r1 == r2) {
result = -1;
}
//두 원이 만나지 않음
else {
result = 0;
}
}
return result;
}
}