3点を通る円の中心と半径

3点を通る円
3点を通る円

POINT

  • 円の通る3点から中心・半径を求める一般式を導出.
  • 導出した式で計算フォームを作成.

昔,Excelに数式ベタ打ちで円の半径を求めた際の計算をメモしておきます.この記事で導出した数式を,jQueryで計算するとこんな感じになります:

1点目 $x_1=$ $y_1=$
2点目 $x_2=$ $y_2=$
3点目 $x_3=$ $y_3=$
中心$(a,b)=$ 半径 $r=$


円の方程式

中心$(a,b)$,半径$r$の円は
\begin{align}
(x-a)^2+(y-b)^2=r^2
\end{align}という方程式を満たす$(x,y)$で与えられます.


3つの未知数(パラメータ)

  1. $a$(中心の$x$座標)
  2. $b$(中心の$y$座標)
  3. $r$(円の半径)

を決めるためには,3つの方程式が必要です.したがって,円の通る3点$(x_1,y_1)$, $(x_2,y_2)$, $(x_3,y_3)$を与えれば円の方程式を決定することができます.

円の中心

円の通る3点$(x_1,y_1)$, $(x_2,y_2)$, $(x_3,y_3)$を与えたことで,未知数$a,b,r$に関する連立方程式
\begin{align}
\begin{cases}
\,(x_1-a)^2+(y_1-b)^2=r^2 &\qquad\text{(1)} \\
\,(x_2-a)^2+(y_2-b)^2=r^2 &\qquad\text{(2)}\\
\,(x_3-a)^2+(y_3-b)^2=r^2 &\qquad\text{(3)}
\end{cases}
\end{align}が得られます.これは未知数$a,b,r$に関する2次式であるため,このままでは扱いにくい形です.


ここで「式( i )$-$式( j )」とすれば
\begin{align}
&(x_i+x_j-2a)(x_i-x_j) \\
&\quad +(y_i+y_j-2b)(y_i-y_j) = 0
\end{align}と未知数$a,b,r$に関する2次式を消去することができます(*1).これを整理すると
\begin{align}
&(x_i-x_j)a + (y_i-y_j)b \\
&\quad = \frac{1}{2}\left[(x_i^2-x_j^2) + (y_i^2-y_j^2)\right]
\end{align}となります.


未知数が$a,b$の2つに減ったため,必要な方程式の数は2つになります.したがって,上の式で$(i,j)=(1,2)$,$(i,j)=(2,3)$として得られる
\begin{align}
\begin{cases}
&\!\!\! (x_1-x_2)a + (y_1-y_2)b \\
&\qquad = \frac{1}{2}\left[(x_1^2-x_2^2) + (y_1^2-y_2^2)\right] \\
&\!\!\! (x_2-x_3)a + (y_2-y_3)b \\
&\qquad = \frac{1}{2}\left[(x_2^2-x_3^2) + (y_2^2-y_3^2)\right]
\end{cases}
\end{align}を解けば$a,b$を求めることができます.


これは,行列の形で書き直すと
\begin{align}
&\!\!\!
\begin{pmatrix}
x_1-x_2 & y_1-y_2 \\
x_2-x_3 & y_2-y_3
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}\\
&\qquad\qquad =\frac{1}{2}
\begin{pmatrix}
|\boldsymbol{X}_1|^2-|\boldsymbol{X}_2|^2\\
|\boldsymbol{X}_2|^2-|\boldsymbol{X}_3|^2
\end{pmatrix}
\end{align}となります($\boldsymbol{X}_i=(x_i,y_i)$としました.$|\boldsymbol{X}_i|$はベクトルの大きさです(つまり$|\boldsymbol{X}_i|^2=x_i^2+y_i^2$)).


このままでは見づらいので,左辺の$2\times2$行列を
\begin{align}
M=
\begin{pmatrix}
\alpha &\beta \\
\gamma&\delta
\end{pmatrix}
\end{align}としましょう.よく知られているように,$M$の逆行列は
\begin{align}
M^{-1}=\frac{1}{\alpha\delta-\beta\gamma}
\begin{pmatrix}
\delta &-\beta \\
-\gamma&\alpha
\end{pmatrix}
\end{align}なので,未知数$a,b$は
\begin{align}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=&\frac{1}{2(\alpha\delta-\beta\gamma)} \times \\
&\quad
\begin{pmatrix}
\delta &-\beta \\
-\gamma&\alpha
\end{pmatrix}
\begin{pmatrix}
|\boldsymbol{X}_1|^2-|\boldsymbol{X}_2|^2\\
|\boldsymbol{X}_2|^2-|\boldsymbol{X}_3|^2
\end{pmatrix}
\end{align}であることがわかりました.

円の半径

上で円の中心$(a,b)$がわかったので,円の方程式から
\begin{align}
r=\sqrt{(x_i-a)^2 + (y_i-b)^2}
\end{align}と計算することができます($(x_i,y_i)$は,3点$(x_1,y_1)$, $(x_2,y_2)$, $(x_3,y_3)$の中の任意の1点).

*1:因数分解の公式$X^2-Y^2=(X+Y)(X-Y)$を使いました.