
점과 점사이의 거리
import math
T = int(input())
for _ in range(T):
x1, y1, r1, x2, y2, r2 = list(map(int, input().split()))
dis = math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
if dis == 0:
if r1 == r2:
print(-1)
else:
print(0)
else:
if r1+r2 == dis or abs(r2-r1) == dis:
print(1)
elif ((abs(r1-r2) < dis) and (dis < r1+r2)):
print(2)
else:
print(0)
코드 설명
- 두 원의 접점의 개수를 구하는 문제임
- 수학적 계산을 해야하기 때문에 import math 사용
- 테스트 케이스 입력
- 입력 값들 입력 후 점과 점 사이의 거리(dis) 계산
- 거리(dis)가 0일 경우 : 원의 중심이 같음
⇒ 반지름이 같으면 같은 원이기 때문에 접점이 무한(-1), 다를 경우 접점이 없음(0)- 이외의 접점이 한 개인 경우 = 접하는 경우 :
반지름의 합과 거리(dis)가 같거나(외접하거나) 큰 원 반지름 - 작은 원 반지름이 거리(dis)인 경우(내접하는 경우)
⇒ r1+r2 == dis or abs(r2-r1) == dis- 두 원이 두 점에서 만나는 경우 :
거리(dis)가 두 원의 반지름의 합보다 작거나(크면 만나지 않음)
거리(dis)가 두 원의 차보다 큰 경우(같으면 접하고 차보다 작으면 만나지 않음)
⇒ (abs(r1-r2) < dis) and (dis < r1+r2)- 이외의 케이스에선 모두 두 원이 만나지 않음