본문 바로가기

컴퓨터/알고리즘

두 원의 접점의 개수

반응형

6개의 경우의 수를 구한다

 

경우의 수 두 점에서 만남 한 점에서 만남 만나지 않는 경우 무수히 많음
외접 내접 외부에서 내부에서
두 중점 거리 < 반지름의 합
(d < r1 + r2)
두 중점 거리 = 반지름의 합
(d = r1 + r2)
두 중점의 거리= 반지름의 차이
(d = |r1 - r2|)
두 중점의 거리 > 반지름의 합
(d > r1 + r2)
두 중점의 거리 < 반지름의 차이
(d < |r1 - r2|
두 중점의 거리= 0 AND 두 반지름이 같은 경우
(d = 0 AND
r1 = r2)
import java.io.IOException;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws IOException{
		/* 백준 1002번 */
		Scanner scanner = new Scanner(System.in);
		int T = scanner.nextInt();
		for (int i = 0; i < T; i++) {

			int x1 = scanner.nextInt();
			int y1 = scanner.nextInt();
			int r1 = scanner.nextInt();

			int x2 = scanner.nextInt();
			int y2 = scanner.nextInt();
			int r2 = scanner.nextInt();

			double d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
			/* 
			 * 두 중점의 거리가 0이고, 반지름까지 같다 
			 * 같은 원
			 */
			if (d == 0 && r1 == r2) {
				System.out.println(-1);
			}
			/*
			 *  두 원이 서로 외접 하거나 내접 하지않은 경우
			 *  접점이 없음 
			 */
			else if (d > r1 + r2 || d < Math.abs(r1 - r2)) {
				System.out.println(0);
			}
			/* 
			 * 두 원이 외접 하거나 내접하는 경우
			 * 접점이 하나 일 경우 
			 */
			else if (d == r1 + r2 || d == Math.abs(r1 - r2)) {
				System.out.println(1);
			}
			/* 접점이 두개 일 경우 */
			else if (d < r1 + r2) {
				System.out.println(2);
			}
		}
	}
 }
반응형

'컴퓨터 > 알고리즘' 카테고리의 다른 글

소수 구하기(에라토스테네스의 체)  (0) 2020.07.20