已知三角形頂點座標,求其外接圓的公式

三角形的外接圓,就是其圓心到三個頂點的距離都相等。設三角形的座標爲(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));
}

上述公式經過驗證,是沒有問題的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章