开启辅助访问
 找回密码
 立即注册

三角形的外接圆

紧张 回答数2 浏览数7076
行列式

三角形的外接圆圆心也就是三角形的外心,一搜到处都有球外心的公式:


如果我们想推导一下的话,首先圆的方程式为:   ,代入三个点:


写成矩阵形式:


也就是行列式:


展开:


对比就是上面的方程式:


对比一下这个方程式和圆的圆心方程式:


对比上下两式可知:


所以有最上面的求外心的式子。
同时值得指出的还有其实分母是三角形面积公式的4倍,即:


这个式子可以通过简单的叉乘也可以通过格林公式证明。
初中几何

如果我们就是简单的算一下2维平面上的三角形的外心还要引入矩阵,行列式在有些情况下就显得有点大材小用。有时候就从简,直接利用这个三角形的外心是三边的垂直平分线的交点既可。可能有以下几种情况:



算出两条直线,找到它们的交点,即算出三角形的外心:
def circumcircle(triangle):
    v1, v2, v3 = triangle
    x1, y1 = v1
    x2, y2 = v2
    x3, y3 = v3
    absy1y2 = abs(y1 - y2)
    absy2y3 = abs(y2 - y3)

    # 这种情况三点共线,无法生成外接圆
    if absy1y2 < EPSION and absy2y3 < EPSION:
        return

    # 第一种情况, v1和v2基本水平
    if absy1y2 < EPSION:
        m2 = -(x3-x2)/(y3-y2)
        mx2 = (x2+x3)/2
        my2 = (y2+y3)/2
        xc = (x2+x1)/2
        yc = m2 *(xc-mx2) + my2
    # 第二种情况: v2和v3基本水平
    elif absy2y3 < EPSION:
        m1 = -(x2-x1)/(y2-y1)
        mx1 = (x1+x2)/2
        my1 = (y1+y2)/2
        xc = (x2+x3)/2
        yc = m1*(xc - mx1) + my1
    # 情况三:
    else:
        m1 = -(x2-x1)/(y2-y1)
        m2 = -(x3-x2)/(y3-y2)
        mx1 = (x1+x2)/2
        mx2 = (x2+x3)/2
        my1 = (y1+y2)/2
        my2 = (y2+y3)/2
        xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2)
        # y1y2 之间差距更大,更不容易出现直线非常靠近垂直的状况,靠近垂直线意味着斜率很大,这样相乘的话误差可能会比较极端
        yc =  m1*(xc - mx1) + my1 if (absy1y2 > absy2y3) else m2 * (xc - mx2) + my2

    dx = x2 - xc
    dy = y2 - yc
    return Circle(Point(xc, yc), math.sqrt(dx*dx+dy*dy))
产生题图代码:
使用道具 举报
| 来自江苏 用Deepseek满血版问问看
aaa1970 | 来自北京
用行列式算误差会放大,可以用参数方程求外接圆心
用Deepseek满血版问问看
回复
使用道具 举报
cuike0728 | 来自北京
初中生表示懵逼
回复
使用道具 举报

相关问题更多>

快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影