레야몬
[C++] 7869번 두 원 - 수학, 기하학, 많은 조건 분기 본문
1. 문제
- 두 원이 주어졌을 때, 교차하는 영역의 넓이를 소수점 셋째 자리까지 구하시오.
<입력>
- - 1 - 두 원의 중심과 반지름 \(x_{1}, y_{1}, r_{1}, x_{2}, y_{2}, r_{2}\)
- 실수는 최대 소수점 둘째자리까지 구한다
<출력>
- - 1 - 교차하는 영역의 넓이를 반올림해 소수점 셋째 자리까지 출력한다.
2. 재정의
- X
3. 해결 방법
- 두 점 사이의 거리 \(d = \sqrt{(x_{2} - x_{1})^{2} + (y_{2} - y_{1})^{2}}\)
- 코사인 제2법칙 \(x^{2} + y^{2} - 2xycos(\theta) = z^{2}\)
- 사인 법칙 \(S = \frac{1}{2} absin(\theta)\)
4. 실수한 점, 개선한 점
- X
<코드>
#include <iostream>
#include <cmath>
using namespace std;
const double pi = 3.14159265358979323846264338;
// <문제>
// 두 원의 중심과 반지름
double x1, yy1, r1, x2, y2, r2;
// 두 점 사이 거리
double d;
// 각도
double theta1, theta2;
double res;
void input() {
cin >> x1 >> yy1 >> r1;
cin >> x2 >> y2 >> r2;
// 두 점 사이 거리
d = sqrt((x2 - x1)*(x2 - x1) + (y2 - yy1)*(y2 - yy1));
if(r1 + r2 <= d)
res = 0;
else if(abs(r1 - r2) >= d)
res = pi * min(r1, r2) * min(r1, r2);
else {
double theta1 = acos((r1*r1 + d*d - r2*r2) / (2*r1*d));
double theta2 = acos((r2*r2 + d*d - r1*r1) / (2*r2*d));
double s1 = r1*r1*theta1 - r1*r1*sin(2*theta1)/2;
double s2 = r2*r2*theta2 - r2*r2*sin(2*theta2)/2;
res = s1+s2;
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
// 소숫점 자리 맞추기
cout << fixed;
cout.precision(3);
input();
cout << res;
return 0;
}
<c언어 삼각함수>
https://edu-coding.tistory.com/20
c언어 삼각함수, 역삼각함수, 쌍곡선함수
삼각함수 중 sin(), cos(), tan() 함수는 각도가 아닌 호도를 사용합니다. 호도는 파이(3.141592)를 180도로 계산하는 방식이며 1호도는 "3.141592/180" 입니다. 함수 설명 double sin(double x) sin() 함수는 x의 사인
edu-coding.tistory.com
<문제 바로가기>
https://www.acmicpc.net/problem/7869
7869번: 두 원
첫째 줄에 두 원의 중심과 반지름 x1, y1, r1, x2, y2, r2가 주어진다. 실수는 최대 소수점 둘째자리까지 주어진다.
www.acmicpc.net
※현재 고등학교 등교 중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고 있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C++] 5670번 휴대폰 자판 - 자료 구조, 문자열, 트리, 트라이 (0) | 2022.12.16 |
---|---|
[C++] 1311번 할 일 정하기 1 - DP, 비트마스킹, 비트필드를 이용한 DP (0) | 2022.12.15 |
[C++] 2162번 선분 그룹 - 자료 구조, 기하학, 분리 집합, 선분 교차 판정 (0) | 2022.12.13 |
[C++] 20149번 선분 교차 3 - 기하학, 많은 조건 분기, 선분 교차 판정 (0) | 2022.12.13 |
[C++] 2213번 트리의 독립집합 - DP, 트리, 트리에서 DP (0) | 2022.12.13 |
Comments