1002번
문제
이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다. 조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.
조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
문제 해결 순서
- 조규현의 좌표를 기준으로 류재명이 있을 수 있는 점을 쭉 이어 그리면 하나의 원이 된다.
- 마찬가지로 백승환의 좌표를 기준으로 류재명이 있을 수 있는 점을 쭉 이어 그리면 하나의 원이 된다.
- 그럼 두 원의 접점이 류재명이 있을 수 있는 위치가 된다.
- 6가지의 경우의 수로 나눠 계산했다. (주석 참고)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
int x1, x2, y1, y2, z1, z2;
double d;
for (int i = 0; i < t; i++){
x1 = scan.nextInt();
y1 = scan.nextInt();
z1 = scan.nextInt();
x2 = scan.nextInt();
y2 = scan.nextInt();
z2 = scan.nextInt();
d = Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2);
// 원의 중점과 반지름이 같을 경우
if (x1 == x2 && y1 == y2 && z1 == z2){
System.out.println("-1");
}
// 두 원의 반지름 합 보다 중점 간 거리가 더 길 때 (두 원이 떨어져 있을 때)
else if(d > Math.pow((z1 + z2), 2)){
System.out.println("0");
}
// 원이 다른 원 안에 있으나 내접하지 않을 때
else if(d < Math.pow((z1 - z2), 2)){
System.out.println("0");
}
// 원이 내접할 때
else if(d == Math.pow((z1 - z2), 2)){
System.out.println("1");
}
// 원이 외접할 때
else if(d == Math.pow((z1 + z2), 2)){
System.out.println("1");
}
// 원이 겹쳐서 2점에서 만날 때
else{
System.out.println("2");
}
}
}
}