三角形

三角形

中线

顶点与对边中点连线: 红色

三角形一边的中点坐标,可以使用平分线定理求出.中点坐标为两端点坐标和的一半.例如边 ab 的平分点 m

m.x = ( a.x + b.x ) / 2 , m.y = ( a.y + b.y ) / 2

3个中线交点连线得三角形: 绿色

重要性质: 中线的交点叫三角形重心. 中点连线叫中位线,平行于对边且长度为对边一半.

垂线

顶点与对边垂足连线: 红色

3个垂足连线得三角形: 绿色

三条垂线的交点叫垂心

对边上的垂足坐标,使用向量法求出.分析过程如下:

根据两个向量垂直性质 a(x1,y1) ⊥ b(x2,y2) ,那么有 x1 * x2 + y1 * y2 = 0

下图中,CH是AB边上的高,那么就有 AB ⊥ HC ,同时还有 AH ⊥ HC

根据向量坐标表示法写出来: 设H点的坐标是 (x , y)

    // 设 H 点的坐标是 (x , y) , A 点 (a.x , a.y) B 点 (b.x , b.y) , AB , AH , HC 表示向量
    AB = (b.x - a.x , b.y - a.y)
    AH = (x - a.x , y - a.y)
    HC = (c.x - x , c.y - y)

    // 因 AB ⊥ HC 故 AB * HC = 0 , 得到一个方程
    ① (b.x - a.x) * (c.x - x) + (b.y - a.y) * (c.y - y) = 0
    // 因 AH ⊥ HC 故 AH * HC = 0 , 得到二个方程
    ② (x - a.x) * (c.x - x) + (y - a.y) * (c.y - y) = 0

    // 解这2个方程得出x,y值,就是垂足坐标
    
方程具体解法

化简方程1得到 x 的表达式

    ① (b.x - a.x) * (c.x - x) + (b.y - a.y) * (c.y - y) = 0
    //
    (b.x - a.x) * (c.x - x) = - (b.y - a.y) * (c.y - y)
    c.x - x = - (b.y - a.y) * (c.y - y) / (b.x - a.x)

    // 得到 x
    x = (b.y - a.y) * (c.y - y) / (b.x - a.x) + c.x
    
    // 设
    M = (b.y - a.y) / (b.x - a.x)
    α = c.y - y
    β = a.y - y 

    // 简化表达式的 x
    x = α * M + c.x


将 x 的表达式带入方程2 ,得到 y 值

    ② (x - a.x) * (c.x - x) + (y - a.y) * (c.y - y) = 0
    
    // 带入后展开
    (α * M + c.x - a.x) * (c.x - α * M - c.x) + (y - a.y) * (c.y - y) = 0
    - (α * M)^2 - α * M * (c.x - a.x) + α * β = 0

    // 方程两边消去一个 α
    - α * M^2 - c.x * M + a.x * M - β = 0
    α * M^2 + β = M * (a.x - c.x)

    // 将 β α 的再代入,化简
    (c.y - y) * M^2 + a.y - y  = M * (a.x - c.x)
    c.y * M^2 - y * M^2 + a.y - y = M * (a.x - c.x)
    y * (M^2 + 1) = a.y - M * (a.x - c.x - c.y * M)

    // 到此, y 坐标就可以求出
    y = (a.y - M * (a.x - c.x - c.y * M)) / (M^2 + 1)

    // 得到 y 后,再带入第一步得到的 x 的方程得到 x
    x = (b.y - a.y) * (c.y - y) / (b.x - a.x) + c.x

角平分线

顶点出发平分顶角的射线: 红色

3个角平分线交点连线得三角形: 绿色

重要性质:角平分线上的点,离角两边的距离相等.角平分线交点是三角形内切圆的圆心.

角平分线与对边交点坐标使用定比分点公式求出:

AH 是角 A 的平分线, H 是与对边 BC 的交点.

根据角平分线的性质有: AB / AC = BH / HC

B , H ,C 是共线的, H 将 BC 分为 BH / HC 这样就可以使用定比分点公式:

x = (x1 + λ * x2) / (1 + λ)

y = (y1 + λ * y2) / (1 + λ)


这个公式中 x1 , x2 , y1 , y2 是线段两个端点坐标, λ 是比例,是分线段为两段后的长度比例.

λ = BH / HC = AB / AC 而 AB / AC 可以使用两点间距离公式求出.这样就得到 λ 值.

B , C 坐标已知,故能求出 x , y

中垂线

三边中点的垂线: 红色

重要性质: 中垂线交点是三角形外接圆的圆心.

中垂线交点坐标使用向量法求出.分析过程如下:

图中,HD HE HF 是中垂线,那么就有 AB ⊥ HD BC ⊥ HE CA ⊥ HF 根据垂直向量性质,得到方程组.

    AB * HD = 0 
    BC * HE = 0
    CA * HF = 0

    // 取两个建立方程组
    AB * HD = 0
    BC * HE = 0
    
    // 设 H 点的坐标是 (x , y) , A 点 (a.x , a.y) B 点 (b.x , b.y) C 点(c.x , c.y)
    ① (b.x - a.x) * (d.x - x) + (b.y - a.y) * (d.y - y) = 0
    ② (c.x - b.x) * (e.x - x) + (c.y - b.y) * (e.y - y) = 0

    // 解这2个方程得出 x , y 值,就是中垂线交点坐标

方程具体解法
    // ①
    (b.x - a.x) * (d.x - x) + (b.y - a.y) * (d.y - y) = 0
    x = d.x + (d.y - y) * (b.y - a.y) / (b.x - a.x)

    // ②
    (c.x - b.x) * (e.x - x) + (c.y - b.y) * (e.y - y) = 0
    x = e.x + (e.y - y) * (c.y - b.y) / (c.x - b.x)

    // 设 A1 , A2 是 ① , ② 的系数
    A1 = (b.y - a.y) / (b.x - a.x)
    A2 = (c.y - b.y) / (c.x - b.x)

    // 那么
    x = d.x + (d.y - y) * A1
    x = e.x + (e.y - y) * A2
    d.x + (d.y - y) * A1 = e.x + (e.y - y) * A2

    // 解出 y , 带入上面其中一个 x 解出 x
    y = (e.x - d.x + e.y * A2 - d.y * A1) / (A2 - A1)

内切圆与外接圆

内切圆圆心是角平分线交点,圆心坐标与半径可以由下列公式计算出

    // r = 内切圆半径 S = 三角形面积 C = 三角形周长 
    r = 2S / C

    // 三角形三个顶点
    a : (x,y) , b : (x,y) , c : (x,y) 
    
    // 内切圆圆心坐标 (x , y)
    x = (bc * a.x + ca * b.x + ab * c.x) / C
    y = (bc * a.y + ca * b.y + ab * c.y) / C
  

外接圆圆心是中垂线交点,这个坐标已实现计算函数,半径就是圆心到任意一个顶点的距离

内切圆圆心:绿色 , 外接圆圆心:黄色

边直径圆

以每条边的中点为圆心,长度为直径的圆

九点圆

三角形三边垂足,三边中点,顶点与垂心的三条连线的中点,共九点都在半径为 R / 2 (三角形外接圆半径)的圆上,圆心是外心与垂心所连线段的中点.

根据这个定义画出圆和点位.

九点

垂足: 红色 , 中点: 绿色 , 顶点与垂心连线中点: 黄色

九点圆圆心: 黑色

其它点

垂心: 蓝色 , 重心(中线交点): 灰色 , 内心(角平分线交点): 棕色 , 外心(中垂线交点): 天蓝色

旁切圆

三角形的一边及其他两边的延长线相切的圆.三角形都有3个旁切圆

旁心是由一个顶角的平分线和另外两个角的外角平分线角点.旁心是旁切圆的圆心

旁心坐标计算
    // 三角形 ABC 三点坐标 a(x1 , y1) b(x2 , y2) c(x3 , y3)
    // a , b ,c 分别对应 ABC 三个顶角的对边
    // S 是三角形面积

    // ap 角 A 的角平分线上的旁心坐标, ra 旁心圆半径
    ap.x = (-ax1 + bx2 + cx3) / (-a + b + c)
    ap.y = (-ay1 + by2 + cy3) / (-a + b + c)
    ra = 2S / (b + c - a)

    // bp 角 B 的角平分线上的旁心坐标, rb 旁心圆半径
    bp.x = (ax1 - bx2 + cx3) / (a - b + c)
    bp.y = (ay1 - by2 + cy3) / (a - b + c)
    rb = 2S / (a + c - b)

    // cp 角 C 的角平分线上的旁心坐标, rb 旁心圆半径
    cp.x = (ax1 + bx2 - cx3) / (a + b - c)
    cp.y = (ay1 + by2 - cy3) / (a + b - c)
    rc = 2S / (a + b - c)

切线点坐标

角 A 平分线线上的旁心 P , 其旁心圆与三角形三边相切的切点 D , E , F 坐标计算:

对于 D 点,连接 A , D ,P 会得到直角三角形,而 PD 是其边 AD 上的高.所以,可以用求垂足的方法得出.(上文已实现方法)

对于 E 点,连接 A , E ,P 这个与求 D 点一样.

对于 F 点,连接 B , P ,C 因为F点是切点,所以 PF ⊥ BC ,也就是 BPC 的 BC 上的高.同样使用求垂足方法得出.