📜  程序来寻找三角形的偏心(1)

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

程序:寻找三角形的偏心

介绍

本程序可以根据给定三角形的顶点坐标,计算出三角形的垂心、重心和外心,并返回它们的坐标。

实现
输入

程序需要从用户输入中获得三角形的顶点坐标。假设三角形的三个顶点分别为 $(x_1, y_1)$,$(x_2, y_2)$,$(x_3, y_3)$。

x1, y1 = map(int, input("请输入第一个顶点的坐标,用空格隔开:").split())
x2, y2 = map(int, input("请输入第二个顶点的坐标,用空格隔开:").split())
x3, y3 = map(int, input("请输入第三个顶点的坐标,用空格隔开:").split())
计算

在得到三角形三个顶点的坐标后,我们可以利用向量的数学知识来计算三角形的垂心、重心和外心。

垂心

垂心是指三角形三边到对边的垂线交点,记为 $H$。垂心的求解公式为:

$$ \begin{aligned} x_H &= \frac{(x_1 - x_2)(x_3 - x_2)(y_3 - y_2) + (y_1 - y_2)(y_3 - y_2)^2}{(x_3 - x_2)^2 + (y_3 - y_2)^2} + x_2 \ y_H &= \frac{(y_1 - y_2)(y_3 - y_2)(x_3 - x_2) + (x_1 - x_2)(x_3 - x_2)^2}{(x_3 - x_2)^2 + (y_3 - y_2)^2} + y_2 \end{aligned} $$

x_h = ((x1 - x2) * (x3 - x2) * (y3 - y2) + (y1 - y2) * (y3 - y2) ** 2) / ((x3 - x2) ** 2 + (y3 - y2) ** 2) + x2
y_h = ((y1 - y2) * (y3 - y2) * (x3 - x2) + (x1 - x2) * (x3 - x2) ** 2) / ((x3 - x2) ** 2 + (y3 - y2) ** 2) + y2

print("垂心坐标为:({:.2f}, {:.2f})".format(x_h, y_h))

重心

重心是指三角形三个顶点到对边的中线交点共三个交点形成的三角形重心点 $G$,记为 $G$。重心的求解公式为:

$$ \begin{aligned} x_G &= \frac{x_1 + x_2 + x_3}{3} \ y_G &= \frac{y_1 + y_2 + y_3}{3} \end{aligned} $$

x_g = (x1 + x2 + x3) / 3
y_g = (y1 + y2 + y3) / 3

print("重心坐标为:({:.2f}, {:.2f})".format(x_g, y_g))

外心

外心是指三角形三个顶点上的圆心,记为 $O$。我们可以通过构造中垂线的方法求得外心的坐标。

首先,我们可以求出两个垂线的中点坐标 $(x_m, y_m)$,这里我们求出对边 $\overline{AB}$ 上的中点坐标:

$$ \begin{aligned} x_m &= \frac{x_1 + x_2}{2} \ y_m &= \frac{y_1 + y_2}{2} \end{aligned} $$

然后,我们就可以求出两个垂线的斜率(垂线的斜率是对边的负倒数):

$$ \begin{aligned} k_{AB} &= - \frac{x_1 - x_2}{y_1 - y_2} \ k_{AC} &= - \frac{x_1 - x_3}{y_1 - y_3} \end{aligned} $$

接下来,我们就可以求出两个垂线的截距:

$$ \begin{aligned} b_{AB} &= y_m - k_{AB}x_m \ b_{AC} &= y_1 - k_{AC}x_1 \end{aligned} $$

最后,我们就可以求出两个垂线的交点 $(x_o, y_o)$,即为外心的坐标:

$$ \begin{aligned} x_o &= \frac{b_{AC} - b_{AB}}{k_{AB} - k_{AC}} \ y_o &= k_{AB}x_o + b_{AB} \end{aligned} $$

x_m = (x1 + x2) / 2
y_m = (y1 + y2) / 2

k_ab = - (x1 - x2) / (y1 - y2)
k_ac = - (x1 - x3) / (y1 - y3)

b_ab = y_m - k_ab * x_m
b_ac = y1 - k_ac * x1

x_o = (b_ac - b_ab) / (k_ab - k_ac)
y_o = k_ab * x_o + b_ab

print("外心坐标为:({:.2f}, {:.2f})".format(x_o, y_o))
输出

最后,我们将求得的垂心、重心和外心的坐标返回给用户。

# 垂心坐标
print("垂心坐标为:({:.2f}, {:.2f})".format(x_h, y_h))

# 重心坐标
print("重心坐标为:({:.2f}, {:.2f})".format(x_g, y_g))

# 外心坐标
print("外心坐标为:({:.2f}, {:.2f})".format(x_o, y_o))
示例
输入:
请输入第一个顶点的坐标,用空格隔开:0 0
请输入第二个顶点的坐标,用空格隔开:3 0
请输入第三个顶点的坐标,用空格隔开:0 4

输出:
垂心坐标为:(1.50, 1.00)
重心坐标为:(1.00, 1.33)
外心坐标为:(1.50, 2.00)