平面上の2円の交点の座標を求める

はじめまして

ブログを作っては潰す過程を繰り返していて, 三日坊主の筆者が続くかは不明ですがやっていきます. はてなブログは初めてですが, 幾何学の話題を中心に記事を書く予定です.

最初の記事は「2円の交点の座標の求め方」について書きます. これは6年前くらいに求めた公式ですが, インターネットを参照しても同じ形の式が案外見つからないんですよね.. 前に潰したブログの記事の繰り返しとなりますが, 数式のテストという事でご容赦下さい.

本題

問題

次の図のような, 平面上の2円の交点\boldsymbol{p}, \boldsymbol{p}'を求める事を考えます.

f:id:hyrodium:20180429115911p:plain

解法

まずは円1の中心が原点で, 円2の中心がx軸上にある場合を考えます.

f:id:hyrodium:20180429121245p:plain

まず, ピタゴラスの定理より, 次が成り立ちます.

\begin{align} r^2-p^2=s^2-(L-p)^2 \end{align}

よってここで

\begin{align} m=\frac{r+s}{L}, \quad n=\frac{r-s}{L} \end{align}

とおけば頂点の座標p,q

\begin{align} p&=\frac{r^2-s^2+L^2}{2L}=\frac{1}{2}L(mn+1), \\ q&=\sqrt{r^2-p^2} \\ &=\sqrt{\left(\frac{1}{2}L(m+n)\right)^2-\left(\frac{1}{2}L(mn+1)\right)^2} \\ &=\frac{1}{2}L\sqrt{m^2+2mn+n^2-m^2n^2-2mn-1} \\ &=\frac{1}{2}L\sqrt{(m^2-1)(1-n^2)} \end{align}

と書けます. 次に円2の中心がx軸上にあるとは限らない場合を考えます.

f:id:hyrodium:20180429121418p:plain

この場合は, 直交行列で回転させて, L|\boldsymbol{b}|に置き換えて

\begin{align} \boldsymbol{p}&= \begin{pmatrix} c/|\boldsymbol{b}| &-d/|\boldsymbol{b}| \\ d/|\boldsymbol{b}| &c/|\boldsymbol{b}| \end{pmatrix} \begin{pmatrix} p \\ q \end{pmatrix} \\ &= \begin{pmatrix} p/|\boldsymbol{b}| &-q/|\boldsymbol{b}| \\ q/|\boldsymbol{b}| &p/|\boldsymbol{b}| \end{pmatrix} \begin{pmatrix} c \\ d \end{pmatrix} \\ &=\frac{1}{2}\boldsymbol{b} +\frac{1}{2} \begin{pmatrix} mn &-\sqrt{(m^2-1)(1-n^2)} \\ \sqrt{(m^2-1)(1-n^2)} &mn \end{pmatrix}\boldsymbol{b} \end{align}

で書けます.

最後に, 円1が原点を中心とするとは限らない場合を考えます.

f:id:hyrodium:20180429121454p:plain

この場合は, \boldsymbol{b}\boldsymbol{b}-\boldsymbol{a}に, \boldsymbol{p}\boldsymbol{p}-\boldsymbol{a}に置き換えて

\begin{align} \boldsymbol{p} &=\frac{1}{2}(\boldsymbol{b}+\boldsymbol{a}) +\frac{1}{2} \begin{pmatrix} mn &-\sqrt{(m^2-1)(1-n^2)} \\ \sqrt{(m^2-1)(1-n^2)} &mn \end{pmatrix}(\boldsymbol{b}-\boldsymbol{a}) \end{align}

となります. 反対側の交点\boldsymbol{p}'は適当に符号を変えて

\begin{align} \boldsymbol{p}' &=\frac{1}{2}(\boldsymbol{b}+\boldsymbol{a}) +\frac{1}{2} \begin{pmatrix} mn &\sqrt{(m^2-1)(1-n^2)} \\ -\sqrt{(m^2-1)(1-n^2)} &mn \end{pmatrix}(\boldsymbol{b}-\boldsymbol{a}) \end{align}

となります.

pdf版はこちら

https://drive.google.com/file/d/1cg2xY0FJ3MNmAqzLWA2AUIA64asKhLkY/view?usp=sharing

おわりに

はてなブログ, 数式書けるのは有り難いのですが, 決して書き易くはないですね. HackMDの方が圧倒的に筆が進みます. (プレビューの速度とか, 画像貼り付け周辺が全然違う) 同じMarkdownでもMathJax周辺の文法が違うのでコピペしただけで通らないのが少し厳しいですね.