접근
두 원의 중심 사이의 거리를 이용하여 위 그림과 같이 간단하게 두개의 원을 다시 정리하면 P(x, y)를 아래와 같이 표현할 수 있다.
$$ x = \frac{r_1^2 - r_2^2 + d^2}{2 * d} $$
$$ y = \sqrt{d^2 - x^2} $$
이 값을 이용하여 두 각도 theta1 과 theta2 를 구할 수 있고, 공통부분의 면적 또한 구할 수 있다.
코드
import sys
from math import pi, atan2
x1, y1, r1, x2, y2, r2 = map(float, sys.stdin.readline().split())
d = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
if d >= r1 + r2:
ans = 0
if d <= abs(r1 - r2):
ans = pi * (min(r1, r2) ** 2)
if max(r1, r2) - min(r1, r2) < d < r1 + r2:
x = (r1 ** 2 - r2 ** 2 + d ** 2) / (2 * d)
y = (r1 ** 2 - x ** 2) ** 0.5
theta1 = atan2(y, x) / pi * 180
theta2 = atan2(y, d - x) / pi * 180
ans = pi * (r1 ** 2) * theta1 / 180 + pi * (r2 ** 2) * theta2 / 180 - d * y
print('%.3f' % ans)
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 1311번: 할 일 정하기 1 (Python, PyPy3) (0) | 2021.05.10 |
---|---|
백준 1069번: 집으로 (Python) (0) | 2021.05.09 |
백준 2162번: 선분 그룹 (Python, PyPy3) (0) | 2021.05.07 |
백준 20149번: 선분 교차 3 (Python) (0) | 2021.05.07 |
백준 17387번: 선분 교차 2 (Python) (0) | 2021.05.06 |
최근댓글