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

📅  最后修改于: 2023-12-03 15:26:36.032000             🧑  作者: Mango

查找三角形中心的程序

本程序用于查找三角形的重心、外心、内心以及垂心的坐标。

输入格式

程序接受用户输入三角形的三个顶点坐标,格式为(x1, y1), (x2, y2), (x3, y3)。

输出格式

程序将返回四种中心点的坐标,格式为(x, y),并按照markdown格式输出。

代码片段
import math

def distance(point1, point2):
    # 计算两点距离
    dis = math.sqrt((point1[0]-point2[0])**2 + (point1[1]-point2[1])**2)
    return dis

def tri_center(p1, p2, p3):
    # 计算三角形重心
    x = (p1[0] + p2[0] + p3[0])/3
    y = (p1[1] + p2[1] + p3[1])/3
    return x, y

def tri_circumcenter(p1, p2, p3):
    # 计算三角形外心
    a = distance(p1, p2)
    b = distance(p1, p3)
    c = distance(p2, p3)
    p = a + b + c
    x = (a*p*(b+c-a)*p1[0] + b*p*(a+c-b)*p2[0] + c*p*(a+b-c)*p3[0])/(16*(a+b+c)**2)
    y = (a*p*(b+c-a)*p1[1] + b*p*(a+c-b)*p2[1] + c*p*(a+b-c)*p3[1])/(16*(a+b+c)**2)
    return x, y

def tri_incenter(p1, p2, p3):
    # 计算三角形内心
    a = distance(p1, p2)
    b = distance(p1, p3)
    c = distance(p2, p3)
    p = a + b + c
    x = (a*p1[0] + b*p2[0] + c*p3[0])/p
    y = (a*p1[1] + b*p2[1] + c*p3[1])/p
    return x, y

def tri_orthocenter(p1, p2, p3):
    # 计算三角形垂心
    a = distance(p2, p3)
    b = distance(p1, p3)
    c = distance(p1, p2)
    A = math.acos((b**2 + c**2 - a**2)/(2*b*c))
    B = math.acos((a**2 + c**2 - b**2)/(2*a*c))
    C = math.acos((a**2 + b**2 - c**2)/(2*a*b))
    x = (p1[0]*math.tan(A) + p2[0]*math.tan(B) + p3[0]*math.tan(C))/(math.tan(A) + math.tan(B) + math.tan(C))
    y = (p1[1]*math.tan(A) + p2[1]*math.tan(B) + p3[1]*math.tan(C))/(math.tan(A) + math.tan(B) + math.tan(C))
    return x, y

# 用户输入三角形三个点的坐标
p1 = tuple(map(float, input("输入第一个点的坐标(x1, y1): ").split()))
p2 = tuple(map(float, input("输入第二个点的坐标(x2, y2): ").split()))
p3 = tuple(map(float, input("输入第三个点的坐标(x3, y3): ").split()))

# 计算并输出四种中心点的坐标
print("重心坐标为:", tri_center(p1, p2, p3))
print("外心坐标为:", tri_circumcenter(p1, p2, p3))
print("内心坐标为:", tri_incenter(p1, p2, p3))
print("垂心坐标为:", tri_orthocenter(p1, p2, p3))

以上为查找三角形中心的程序,使用者只需输入三角形的三个顶点坐标,即可得到重心、外心、内心以及垂心的坐标。本程序已对输入格式和输出格式做了详细说明。