두 원이 주어졌을 때
곂치는 영역의 넓이를 구합시다
두 원의 관계에 대해 먼저 조사해야 합니다
한개의 원 안에 쏙 들어가기도 하고
일부분만 곂치기도 하고
곂치지 않을 수도 있기 때문입니다
코드입니다
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() 같이
수학에서 사용하는 함수들만 알고 있다면요
'백준 문제풀기 > JAVA' 카테고리의 다른 글
[백준 8958 JAVA 자바] OX퀴즈 (0) | 2023.08.11 |
---|---|
[백준 8393 JAVA 자바] 합 (0) | 2023.08.11 |
[백준 7758 JAVA 자바] 회사에 있는 사람 (0) | 2023.08.11 |
[백준 7287 JAVA 자바] 등록 (0) | 2023.08.11 |
[백준 5622 JAVA 자바] 다이얼 (0) | 2023.08.11 |