접근

두 원의 중심 사이의 거리를 이용하여 위 그림과 같이 간단하게 두개의 원을 다시 정리하면 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)

더 생각해 볼 것?

...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기