본문 바로가기

백준 문제풀기/JAVA

[백준 7869 JAVA 자바] 두 원

 

두 원이 주어졌을 때

곂치는 영역의 넓이를 구합시다

 

두 원의 관계에 대해 먼저 조사해야 합니다

 

한개의 원 안에 쏙 들어가기도 하고

일부분만 곂치기도 하고

곂치지 않을 수도 있기 때문입니다

 

코드입니다

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		double x1 = Double.parseDouble(st.nextToken());
		double y1 = Double.parseDouble(st.nextToken());
		double r1 = Double.parseDouble(st.nextToken());
		double x2 = Double.parseDouble(st.nextToken());
		double y2 = Double.parseDouble(st.nextToken());
		double r2 = Double.parseDouble(st.nextToken());

		double d = Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2));

		double S = 0;

		if (r1+r2 <= d) {
			S = (double) 0;
		}else if (Math.abs(r1 - r2) >= d) {
			if (r1>r2) {
				S = Math.PI * Math.pow(r2, 2);
			}else {
				S = Math.PI * Math.pow(r1, 2);
			}
		}else {
			double gak1 = Math.acos((r1 * r1 + d * d - r2 * r2) / (2 * r1 * d));
			double gak2 = Math.acos((r2 * r2 + d * d - r1 * r1) / (2 * r2 * d));

			double S1 = (r1 * r1 * gak1) - (r1 * r1 * Math.sin(2 * gak1) / 2);
			double S2 = (r2 * r2 * gak2) - (r2 * r2 * Math.sin(2 * gak2) / 2);
			S = S1 + S2;
		}
		System.out.println(String.format("%.3f", S));
	}
}

 

이과 고등학생이라면

크게 어렵지 않은 문제입니다

 

단 Math.acos() 같이

수학에서 사용하는 함수들만 알고 있다면요