(前提条件)
2つの円 C1, C2 があるとします。
また、
それぞれの中心座標を(x1, y1), (x2, y2) とし、
同じく半径を r1, r2 とします。
さらに、2つの円の中心間の距離を d とします。
(2つの円が離れている状態)
・状態1: 2つの円が離れている —> d > r1 + r2
・状態2:一方の円が他方の円の中にある —> d < | r1 ー r2 |
(2つの円が接している状態)
・状態3:2つの円が内接している —> d = | r1 ー r2 |
・状態4:2つの円は外接している —> d = r1 + r2
よって以上の4つの状態以外であれば、2つの円は2点で交わっていることになります。
以下に、2つの円が2点で交わっているかどうかを判定するプログラムの例をpython3 で記述してみます。
x1, y1, r1 = 0,0,1
x2, y2, r2 = 2,0,1
isOverlap = True
d = (x1 - x2)**2 + (y1 - y2)**2 #ルートはとっていませんので、以下の計算も2乗した状態で計算していきます
if d >= (r1 + r2)**2 or d <= (r1 - r2)**2:
isOverlap = False
print(isOverlap) #--> False
1点以上で接しているかを判定する場合は、判定条件のイコールを取ればよいです。
x1, y1, r1 = 0,0,1
x2, y2, r2 = 2,0,1
isOverlap = True
d = (x1 - x2)**2 + (y1 - y2)**2 #ルートはとっていませんので、以下の計算も2乗した状態で計算していきます
if d > (r1 + r2)**2 or d < (r1 - r2)**2:
isOverlap = False
print(isOverlap) #--> True