円と円の交点を求める

HOME>>メモ>>図形処理の基礎>>円と円の交点を求める

交点を求める

円と円の交点を求めてみます。 どちらの円も任意の位置にあると面倒なので、片方の円は原点中心とします。

\begin{eqnarray*} x^2 + y^2 &=& r_1^2\\ (x-x_1)^2 + (y-y_1)^2 &=& r_2^2 \end{eqnarray*}

上の円の方程式から、下の円の方程式を引きます。

\begin{eqnarray*} x^2-(x-x_1)^2 + y^2-(y-y_1)^2 &=& r_1^2 - r_2^2\\ 2x_1x - x_1^2 + 2y_1y - y_1^2 &=& r_1^2 - r_2^2\\ x_1x + y_1y - \frac{x_1^2+y_1^2+r_1^2-r_2^2}{2} &=& 0 \end{eqnarray*}

ここで、$(x_1^2+y_1^2+r_1^2-r_2^2)/2=a$とおけば、

\[ x_1x + y_1y - a = 0 \]

と直線の方程式となります。この直線は、円と円の二つの交点を通る直線です。 つまり、ここで求めた直線ともともとの円の交点を求めれば、円と円の交点がわかります。 「直線と円の交点を求める」で求めた結果を使えば、

\begin{eqnarray*} x &=& \frac{ax_1 \pm y_1\sqrt{(x_1^2+y_1^2)r_1^2 - a^2}}{x_1^2+y_1^2} \\ y &=& \frac{ay_1 \mp x_1\sqrt{(x_1^2+y_1^2)r_1^2 - a^2}}{x_1^2+y_1^2} \end{eqnarray*}

となります。

どちら円も任意の位置にある場合は、$x_1\rightarrow x_1-x_0$$y_1\rightarrow y_1-y_0$と置き換えて求めます。

実際にやってみよう

実際にやってみました。 SVGにJavascriptを埋め込んで簡単なアニメーションを作ってみました。 黒の直線と円が与えられた時の交点を求めます。赤の小さい円が交点です。
SVGファイルをダウンロードする

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