📜  程序来寻找三角形的正交中心(1)

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

寻找三角形的正交中心

寻找三角形的正交中心可以通过以下步骤完成:

1. 确定三角形的三个顶点坐标

假设三角形的三个顶点坐标分别为 $(x_1,y_1), (x_2,y_2), (x_3,y_3)$。

2. 计算三角形的边长

利用勾股定理计算三条边长:

a = sqrt((x2-x1)^2 + (y2-y1)^2)
b = sqrt((x3-x2)^2 + (y3-y2)^2)
c = sqrt((x1-x3)^2 + (y1-y3)^2)
3. 计算三角形的周长和半周长

三角形的周长为三条边长之和,而半周长为周长的一半:

p = a + b + c
s = p / 2
4. 计算三角形的面积

利用海伦公式计算三角形的面积:

area = sqrt(s * (s-a) * (s-b) * (s-c))
5. 计算三角形的内心坐标

三角形的内心是三条中线的交点,其中中线可通过两个顶点和对应边的中点计算得出。因此,可计算出三条中线的斜率和截距,进而求得交点作为三角形的内心坐标。

mid12_x = (x1 + x2) / 2
mid12_y = (y1 + y2) / 2
mid12_slope = (y2-y1) / (x2-x1)
mid12_intercept = mid12_y - mid12_slope * mid12_x

mid23_x = (x2 + x3) / 2
mid23_y = (y2 + y3) / 2
mid23_slope = (y3-y2) / (x3-x2)
mid23_intercept = mid23_y - mid23_slope * mid23_x

mid31_x = (x3 + x1) / 2
mid31_y = (y3 + y1) / 2
mid31_slope = (y1-y3) / (x1-x3)
mid31_intercept = mid31_y - mid31_slope * mid31_x

incenter_x = (mid23_intercept - mid31_intercept) / (mid31_slope - mid23_slope) 
incenter_y = incenter_x * mid31_slope + mid31_intercept
6. 计算三角形的外心坐标

三角形的外心是三条垂直平分线的交点,其中垂直平分线是对应边的垂线和中线的平行线。因此,可计算出三条对应边的斜率和中点,进而求得三条垂直平分线的斜率和截距,进而求得交点作为三角形的外心坐标。

v12_slope = -1 / mid12_slope
v12_mid_x = (x1 + x2) / 2
v12_mid_y = (y1 + y2) / 2
v12_intercept = v12_mid_y - v12_slope * v12_mid_x

v23_slope = -1 / mid23_slope
v23_mid_x = (x2 + x3) / 2
v23_mid_y = (y2 + y3) / 2
v23_intercept = v23_mid_y - v23_slope * v23_mid_x

v31_slope = -1 / mid31_slope
v31_mid_x = (x3 + x1) / 2
v31_mid_y = (y3 + y1) / 2
v31_intercept = v31_mid_y - v31_slope * v31_mid_x

A = np.array([[mid12_slope, -1], [mid23_slope, -1]])
B = np.array([mid12_slope*mid12_x - mid12_y, 
              mid23_slope*mid23_x - mid23_y])
p = np.linalg.solve(A, B)

outcenter_x, outcenter_y = p

使用以上代码片段,即可计算出三角形的正交中心。