3点を通る円

Top »

中心点は三角形の外心でもある。

3点(x1,y1)(x2,y2)(x3,y3)

円の半径:r、中心を(a,b)とする。

行列式による方法

一番簡単か

var d1 = x1*x1+y1*y1;
var d2 = x2*x2+y2*y2;
var d3 = x3*x3+y3*y3;
var u = 0.5/(x1*y2-x2*y1+x2*y3-x3*y2+x3*y1-x1*y3);
var a = u*(d1*y2-d2*y1+d2*y3-d3*y2+d3*y1-d1*y3);
var b = u*(x1*d2-x2*d1+x2*d3-x3*d2+x3*d1-x1*d3);
var r = Math.sqrt((a-x1)*(a-x1)+(b-y1)*(b-y1));

連立方程式による解法

円の方程式は (x-a)^2+(y-b)^2 = r^2

与点は中心からの距離が等しいから三平方の定理で

r^2 = (a-x1)^2+(b-y1)^2 = (a-x2)^2+(b-y2)^2 = (a-x3)^2+(b-y3)^2

展開すると

x1^2-2*a*x1+y1^2-2*b*y1+a^2+b^2 = x2^2-2*a*x2+y2^2-2*b*y2+a^2+b^2 = x3^2-2*a*x3+y3^2-2*b*y3+a^2+b^2

a^2+b^2を引くと

x1^2-2*a*x1+y1^2-2*b*y1 = x2^2-2*a*x2+y2^2-2*b*y2 = x3^2-2*a*x3+y3^2-2*b*y3

この連立方程式を解くと中心は

a = -((y2-y1)*y3^2+(-y2^2+y1^2-x2^2+x1^2)*y3+y1*y2^2+(-y1^2+x3^2-x1^2)*y2+(x2^2-x3^2)*y1)/((2*x2-2*x1)*y3+(2*x1-2*x3)*y2+(2*x3-2*x2)*y1)
b = ((x2-x1)*y3^2+(x1-x3)*y2^2+(x3-x2)*y1^2+(x2-x1)*x3^2+(x1^2-x2^2)*x3+x1*x2^2-x1^2*x2)/((2*x2-2*x1)*y3+(2*x1-2*x3)*y2+(2*x3-2*x2)*y1)

半径は

r = sqrt((a-x1)^2+(b-y1)^2)

垂直二等分線の交点による解法

inserted by FC2 system