求三角形外心坐标

给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?
例如 :给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y)

  1. 首先,外接圆的圆心是三角形三条边的垂直平分线的交点,我们根据圆心到顶点的距离相等,可以列出以下方程:
    (x1-x)*(x1-x)-(y1-y)*(y1-y)=(x2-x)*(x2-x)+(y2-y)*(y2-y);
    (x2-x)*(x2-x)+(y2-y)*(y2-y)=(x3-x)*(x3-x)+(y3-y)*(y3-y);
    2.化简得到:
    2*(x2-x1)*x+2*(y2-y1)y=x22+y22-x12-y12;
    2*(x3-x2)*x+2*(y3-y2)y=x32+y32-x22-y22;
    令A1=2*(x2-x1);
    B1=2*(y2-y1);
    C1=x22+y22-x12-y12;
    A2=2*(x3-x2);
    B2=2*(y3-y2);
    C2=x32+y32-x22-y22;

    A1*x+B1*y=C1;
    A2*x+B2*y=C2;
    3.最后根据克拉默法则:
    x=((C1*B2)-(C2*B1)) / ((A1*B2)-(A2*B1));
    y=((A1*C2)-(A2*C1)) / ((A1*B2)-(A2*B1));
    因此,x,y为最终结果;
    对于空间中的三角形,只不过最后解方程组的时候是三元方程组
    Ps:克拉默法则可以用向量积和数量积的方法证明,也可以用高等代数的知识证明
int main()
{
    double x1, x2, x3, y1, y2, y3;
    cin>>x1>>y1>>x2>>y2>>x3>>y3;
    double A1 = 2 * (x2 - x1),
       B1 = 2 * (y2 - y1),
       C1 = x2 * x2 - x1 * x1 - y1 * y1 + y2 *y2,
       A2 = 2 * (x3 - x2),
       B2 = 2 * (y3 - y2),
       C2 = x3 * x3 - x2 * x2 - y2 * y2  + y3 * y3;
    double x,y;
    x=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1));
    y=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1));
    printf("%.3lf %.3lf\n",x,y);
    return 0;
}

你可能感兴趣的:(算法)