三点を通る円の中心座標を求める

円の公式
(xa)2 + (yb)2 = r2 …(1)
に三点の座標を放り込んで、a,bに関する連立方程式を解けば求まるような気がします。

問題は、これをどうやってプログラミングするかです。
未知数a,bが二乗になっているので、平方根の計算とかがでてきてややこしそう。

手計算ではあっさり解けるのに、なぜコンピュータープログラミングで悩まなければならないのでしょうか。

ポク、ポク、ポク、ポク・・・

式を展開する

まず、手計算でやるのと同じように、式(1)を展開してみます。

(xa)2 + (yb)2 = r2
x2 – 2ax + a2 + y2 – 2by + b2 = r2

これに、円を通る座標(x1,y1),(x2,y2),(x3,y3)を代入します。
x12 – 2x1a + a2 + y12 – 2y1b + b2 = r2 (2)
x22 – 2x2a + a2 + y22 – 2y2b + b2 = r2 (3)
x32 – 2x3a + a2 + y32 – 2y3b + b2 = r2 (4)

式(2)から式(3)を引いて整理すると、
2(x1x2)a + 2(y1y2)b = x12x22 + y12y22 (5)

式(2)から式(4)を引いて整理すると、
2(x1x3)a + 2(y1y3)b = x12x32 + y12y32 (6)

ここで、
2(x1x2) = i
2(y1y2) = j
2(x1x3) = k
2(yly3) = l
x12x22 + y12y22 = c1
x12x32 + y12y32 = c2
と置き換えると、式(5)と式(6)は、

ia + ja = c1
ka + la = c2

a, b を x, yに、係数と定数項をa,b,c,d,e,fに置き換えて、馴染みの式に変更すると。

ax + by = e
cx + dy = f

この二元一次連立方程式を解けば、円の中心座標が求まる。

Pythonプログラミング物語 © 2016 Frontier Theme