📜  求三角形中心的程序(1)

📅  最后修改于: 2023-12-03 14:55:58.523000             🧑  作者: Mango

求三角形中心的程序

三角形中心是一个有趣而重要的数学概念。在计算机科学和图形学中,我们需要通过算法来计算三角形中心的坐标。本文将介绍一些用于计算三角形中心的常见算法。

1. 重心

重心是三角形三条中线交点的中点,也就是三个顶点链接它们对应中点的线段所形成的交点。

重心坐标的计算公式如下:

$$ G = \dfrac{1}{3}(A+B+C) $$

其中 $A,B,C$ 分别是三角形三个顶点的坐标。

以下是一个用 Python 实现重心计算的示例代码:

def centroid(a, b, c):
    return [(a[0]+b[0]+c[0])/3.0, (a[1]+b[1]+c[1])/3.0]
2. 垂心

垂心是三角形三条高线交点,也就是三个顶点链接它们所对边垂线的交点。

垂心坐标的计算公式如下:

$$ H = B + \dfrac{[ACB]\cdot(A-C)\times(B-C)}{|(A-C)\times(B-C)|^2} $$

其中 $[ACB]$ 是三角形 $ABC$ 的面积,$A,B,C$ 分别是三角形三个顶点的坐标。$\times$ 表示向量的叉积。

以下是一个用 Python 实现垂心计算的示例代码:

def circumcenter(a, b, c):
    ab = [b[0]-a[0], b[1]-a[1]]
    ac = [c[0]-a[0], c[1]-a[1]]
    bc = [c[0]-b[0], c[1]-b[1]]
    area = ab[0]*ac[1] - ab[1]*ac[0]
    va = ab[0]*bc[0] + ab[1]*bc[1]
    vb = -ac[0]*bc[0] - ac[1]*bc[1]
    return [(a[0]*vb + b[0]*va)/float(2*area),
            (a[1]*vb + b[1]*va)/float(2*area)]
3. 外心

外心是三角形三条垂线的交点,也就是以三角形三边为直径的圆心。

外心坐标的计算公式如下:

$$ O = \dfrac{(A-C)\times(B-D)\cdot(E-F)-(B-D)\times(C-A)\cdot(F-G)}{(A-C)\times(B-D)\cdot(H-J)-(B-D)\times(C-A)\cdot(I-K)} $$

其中 $A,B,C$ 分别是三角形三个顶点的坐标,$D = \dfrac{1}{2}(A+B), E = \dfrac{1}{2}(A+C), F = \dfrac{1}{2}(B+C)$。$G,H,I,J,K$ 分别是

$G = (A+B+C)/3, H = (A+C)/2, I = (A+B)/2,$

$J = (B+C)/2, K = (B+C)/2$

以下是一个用 Python 实现外心计算的示例代码:

def circumcenter(a, b, c):
    d = 2*(a[0]*(b[1]-c[1]) + b[0]*(c[1]-a[1]) + c[0]*(a[1]-b[1]))
    ux = ((a[0]**2 + a[1]**2)*(b[1]-c[1]) + (b[0]**2 + b[1]**2)*(c[1]-a[1]) + (c[0]**2 + c[1]**2)*(a[1]-b[1]))/d
    uy = ((a[0]**2 + a[1]**2)*(c[0]-b[0]) + (b[0]**2 + b[1]**2)*(a[0]-c[0]) + (c[0]**2 + c[1]**2)*(b[0]-a[0]))/d
    return [ux, uy]
4. 内心

内心是三角形三条角平分线的交点,也就是三个顶点到对应内角平分线的距离相等的点。

内心坐标的计算公式如下:

$$ I = \dfrac{aA + bB + cC}{a+b+c} $$

其中 $A,B,C$ 分别是三角形三个顶点的坐标,$a,b,c$ 分别是三角形各边长。

以下是一个用 Python 实现内心计算的示例代码:

import math

def distance(a, b):
    return math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2)

def incenter(a, b, c):
    d1 = distance(b, c)
    d2 = distance(a, c)
    d3 = distance(a, b)
    x = (d1*a[0] + d2*b[0] + d3*c[0]) / (d1 + d2 + d3)
    y = (d1*a[1] + d2*b[1] + d3*c[1]) / (d1 + d2 + d3)
    return [x, y]
结论

通过以上几种算法,可以计算三角形的重心、垂心、外心、内心。这些算法可以在计算机图形学、计算机辅助设计、计算机制图等领域得到广泛应用。