Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 두 동심원 경계 안에 원이 완전히 포함되는지 확인하는 방법

반지름이 각각 r1r2인 두 개의 동심원(중심이 같은 원)이 있다고 가정해 보겠습니다. 여기에 추가로 중심 좌표 coord와 반지름 값 r이 주어집니다. 우리가 확인해야 할 것은, coord를 중심으로 하는 반지름 r짜리 원이 주어진 두 동심원이 형성하는 경계 영역 안에 완전히 들어가는지 여부입니다.

예를 들어 입력이 r1 = 4, r2 = 2, coord = (3, 0), r = 1이라면 결과는 True입니다.

Python으로 두 동심원 경계 안에 원이 완전히 포함되는지 확인하는 방법

풀이 접근 방법

이 문제는 기하학적 거리 계산만으로 간단하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.

  • 먼저 원점에서 좌표 (x, y)까지의 거리 val을 피타고라스 정리를 이용해 구합니다. 즉, val = √(x² + y²)
  • 작은 원이 바깥쪽 경계를 벗어나지 않으려면, 중심 거리에 반지름을 더한 값이 바깥 원의 반지름 이하여야 합니다. 즉, val + r ≤ r1
  • 동시에 작은 원이 안쪽 경계를 침범하지 않으려면, 중심 거리에서 반지름을 뺀 값이 허용되는 최소 거리 이상이어야 합니다. 즉, val − r ≥ r1 − r2
  • 두 조건을 모두 만족하면 True를, 하나라도 만족하지 않으면 False를 반환합니다.

아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.

예제 코드

from math import pow, sqrt

def solve(r1, r2, coord, r) :
   val = sqrt(pow(coord[0], 2) + pow(coord[1], 2)) 
     
   if val + r <= r1 and val - r >= r1 - r2 :
      return True 
   return False 

r1 = 4
r2 = 2
coord = (3, 0)
r = 1
print(solve(r1, r2, coord, r))

입력

4,2,(3, 0),1

출력

True

위 코드에서 solve 함수는 먼저 coord 좌표와 원점 사이의 거리를 계산한 뒤, 앞서 설명한 두 조건식을 검사하여 원이 경계 안에 완전히 포함되는지 판별합니다. 시간 복잡도는 O(1)로, 상수 시간 안에 결과를 얻을 수 있습니다.