2つの円の共通接線を求める

HOME>>メモ>>図形処理の基礎>>2つの円の共通接線を求める

共通内接線求めてみる

円と円の共通接線を求めてみます。 まずは片方の円は原点中心として考えましょう。 原点中心半径$r$の円Aと、点P$(x_\mathrm{P},y_\mathrm{P})$中心の半径$R$の円Bを考えます。

円A上に点Q$(x_\mathrm{Q},y_\mathrm{Q})$をとり、この点を通る切線を引きます。 この切線の方程式は「円の接線を求める」の結果から次のようになります。

\[ x_\mathrm{Q}x + y_\mathrm{Q}y - r^2 = 0 \]

この直線が円Bと接していれば、この直線は共通接線となります。 「円Bと接する」ことと、「点Pとの距離が$R$である」ことが等価であることを利用すれば、 この条件は「点と直線の距離を求める」の結果を用いて

\begin{eqnarray*} \frac{|x_\mathrm{P}x_\mathrm{Q} + y_\mathrm{P}y_\mathrm{Q} - r^2|}{\sqrt{x_\mathrm{Q}^2 + y_\mathrm{Q}^2}} &=& R \\ \frac{x_\mathrm{P}x_\mathrm{Q} + y_\mathrm{P}y_\mathrm{Q} - r^2}{r} &=& \pm R \end{eqnarray*}

と表すことができます。 ここで右辺の符号は点Qが直線のどちら側にあるかを表します。 プラスであれば2つの円は直線をはさんで反対側、マイナスであれば同じ側にあることを意味します。 これから、プラスのときは共通内接線、マイナスのときは共通外接線を表していることがわかります。 ここではプラスのとき、つまり共通内接線を求めてみましょう。 このとき、円Aの接線が円Bと接する条件は次のように書き直せます。

\[ x_\mathrm{P}x_\mathrm{Q} + y_\mathrm{P}y_\mathrm{Q} - r(r + R) = 0 \]

この方程式と、点Qが円A上にあるという条件

\[ x_\mathrm{Q}^2+y_\mathrm{Q}^2 = r^2 \]

を連立させて点Qの座標について解けば、共通内接線がわかります。 この2つの方程式、よく見ると円と直線の方程式です。 つまり、直線と円の交点を求める問題として解くことができます。 以前求めた結果を用いて解くと

\begin{eqnarray*} x_\mathrm{Q} &=& r\frac{x_\mathrm{P}(r+R) \pm y_\mathrm{P}\sqrt{(x_\mathrm{P}^2+y_\mathrm{P}^2)-(r+R)^2}}{x_\mathrm{P}^2+y_\mathrm{P}^2} \\ y_\mathrm{Q} &=& r\frac{y_\mathrm{P}(r+R) \mp x_\mathrm{P}\sqrt{(x_\mathrm{P}^2+y_\mathrm{P}^2)-(r+R)^2}}{x_\mathrm{P}^2+y_\mathrm{P}^2} \end{eqnarray*}

となります。この点を通る円Aの接線が円Aと円Bの共通内接線となります。

共通外接線を求めてみる

$R$$-R$に置き換えるだけですね。具体的に書くと以下のようになります。

\begin{eqnarray*} x_\mathrm{Q} &=& r\frac{x_\mathrm{P}(r-R) \pm y_\mathrm{P}\sqrt{(x_\mathrm{P}^2+y_\mathrm{P}^2)-(r-R)^2}}{x_\mathrm{P}^2+y_\mathrm{P}^2} \\ y_\mathrm{Q} &=& r\frac{y_\mathrm{P}(r-R) \mp x_\mathrm{P}\sqrt{(x_\mathrm{P}^2+y_\mathrm{P}^2)-(r-R)^2}}{x_\mathrm{P}^2+y_\mathrm{P}^2} \end{eqnarray*}

この点を通る円Aの接線が円Aと円Bの共通外接線となります。

実際にやってみよう

実際にやってみました。 SVGにJavascriptを埋め込んで簡単なアニメーションを作ってみました。 SVGファイルをダウンロードする

残念ながら現在使用しているブラウザでは表示できません。 IE以外のブラウザの最新版をダウンロードしてください。