已知三角形顶点坐标,求其外接圆的公式

三角形的外接圆,就是其圆心到三个顶点的距离都相等。设三角形的坐标为(x1,y1),(x2,y2),(x3,y3),圆心坐标为(x,y),那么它们满足以下方程组:

(x-x1)^2+(y-y1)^2=(x-x2)^2+(y-y2)^2

(x-x1)^2+(y-y1)^2=(x-x3)^2+(y-y3)^2

解方程之后,可以得到x和y的表达式。我硬着头皮解了一次,发现表达式很复杂,没办法化简。公式不单独列出,直接上代码(C#):

/// <summary>
/// 三角形外接圆
/// </summary>
/// <param name="triangle">三角形顶点</param>
/// <param name="center">圆心</param>
/// <param name="radius">半径</param>
public static void Circumcircle(Point2D[] triangle, out Point2D center, out double radius)
{
    double x1 = triangle[0].X;
    double y1 = triangle[0].Y;
    double x2 = triangle[1].X;
    double y2 = triangle[1].Y;
    double x3 = triangle[2].X;
    double y3 = triangle[2].Y;

    double x3y2 = x3 * y2;
    double x3y1 = x3 * y1;
    double x2y3 = x2 * y3;
    double x1y3 = x1 * y3;
    double x2y1 = x2 * y1;
    double x1y2 = x1 * y2;
    double x1x2 = x1 * x2;
    double x2x3 = x2 * x3;
    double x1x3 = x1 * x3;

    double y = (x3y2 * y2 - x3y1 * y1 - x2y3 * y3 + x1y3 * y3 + x2y1 * y1 - x1y2 * y2 +
        x1x2 * (x1 - x2) + x2x3 * (x2 - x3) + x1x3 * (x3 - x1)) /
        (x3y2 - x3y1 - x2y3 + x1y3 + x2y1 - x1y2) / 2;
    double x = 0;
    if (Math.Abs(x2 - x1) > 1e-6)
    {
        x = (x2 + x1) / 2 +
            (y2 + y1 - 2 * y) * (y2 - y1) / (x2 - x1) / 2;
    }
    else
    {
        x = (x3 + x2) / 2 +
            (y3 + y2 - 2 * y) * (y3 - y2) / (x3 - x2) / 2;
    }

    center = new Point2D(x, y);
    radius = Math.Sqrt(Math.Pow(x - x1, 2) + Math.Pow(y - y1, 2));
}

上述公式经过验证,是没有问题的。

    原文作者:还是叫明
    原文地址: https://blog.csdn.net/lweiyue/article/details/101051673
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞