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;
   }
}

+ Recent posts