20150_0907_三角形各种心的计算公式_垂心_外心_重心_内心

三角形垂心计算公式, 三角形外心计算公式:

三角形的垂心公式
用坐标表示

垂心:
A(x1,y1)B(x2,y2)C(x3,y3),垂心H(x0,y0) 
用斜率是负倒数关系Kbc=y3-y2/x3-x2 Kah=y1-y0/x1-x0 Kah=-1/Kbc 
得到方程(y3-y2)/(x3-x2)=-(x1-x0)/(y1-y0) 
同理可得方程(y2-y1)/(x2-x1)=-(x3-x0)/(y3-y0) 
解出x0,y0即可,

垂心.外心

 

三角形重心计算公式, 三角形内心计算公式:

重心.内心

以上内容摘自: 数学吧

转载于:https://www.cnblogs.com/BigBigLiang/p/4789086.html

### 计算三角形的Python实现 #### 定义辅助函数 为了简化后续计算过程,定义一些常用的几何运算函数: ```python import math def distance(p1, p2): """两点之间的距离""" return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2) def slope(p1, p2): """通过两个点计算直线斜率""" if p2[0] != p1[0]: return (p2[1]-p1[1])/(p2[0]-p1[0]) else: return None # 表示垂直线的情况 def perpendicular_slope(slope_value): """给定一条直线的斜率,返回其垂线的斜率""" if slope_value is not None and slope_value != 0: return -1 / slope_value elif slope_value == 0: return None # 平行于X轴变为平行Y轴 else: return 0 # 原本是None表示垂直线,则现在变水平线 ``` #### 计算内心 内心的坐标可以通过角平分线交点来获得。这里采用面积法求解。 ```python def incenter(A, B, C): ax, ay = A; bx, by = B; cx, cy = C a = distance(B,C); b = distance(A,C); c = distance(A,B) px = (a*ax + b*bx + c*cx) / (a+b+c) py = (a*ay + b*by + c*cy) / (a+b+c) return round(px, 5), round(py, 5) ``` #### 计算外心 外心位于三边中垂线的交点处。 ```python def circumcenter(A, B, C): D = 2 * ((B[0] - A[0])*(C[1] - A[1]) - (B[1] - A[1])*(C[0] - A[0])) Ux = (((B[0]**2 + B[1]**2)*(C[1] - A[1])) - ((C[0]**2 + C[1]**2)*(B[1] - A[1])) + ((A[0]**2 + A[1]**2)*(B[1] - C[1]))) / D Uy = (((B[0]**2 + B[1]**2)*(C[0] - A[0])) - ((C[0]**2 + C[1]**2)*(B[0] - A[0])) + ((A[0]**2 + A[1]**2)*(B[0] - C[0]))) / D return round(Ux, 5), round(Uy, 5) ``` #### 计算重心 重心就是三个顶点坐标的平均值。 ```python def centroid(A, B, C): gx = sum([pt[0] for pt in [A, B, C]])/3 gy = sum([pt[1] for pt in [A, B, C]])/3 return round(gx, 5), round(gy, 5) ``` #### 计算垂心 利用两条高的交点作为垂心位置。 ```python def orthocenter(A, B, C): mAB = slope(A, B) mBC = slope(B, C) mhAC = perpendicular_slope(mAB) mhBA = perpendicular_slope(mBC) if mhAC is None or mhBA is None: raise ValueError('无法处理直角或钝角三角形') x_diff_AC = C[0] - A[0]; y_diff_AC = C[1] - A[1] x_diff_BA = A[0] - B[0]; y_diff_BA = A[1] - B[1] H_x = (mhAC*x_diff_AC*A[0]+mhBA*x_diff_BA*B[0]+mAB*y_diff_AC*C[1]-mBC*y_diff_BA*A[1])/( mhAC*x_diff_AC-mhBA*x_diff_BA+mAB*y_diff_AC-mBC*y_diff_BA) H_y = (-perpendicular_slope(mhAC)*H_x+A[1]+slope(C,A)*(H_x-A[0])) return round(H_x, 5), round(H_y, 5) ``` #### 计算旁 对于每个顶点对应的旁切圆来说,旁可以看作是由该顶点出发向另外两边做高并延长后的交点。 由于旁涉及到较为复杂的解析几何推导,在此仅提供一种基于已知公式的简单方法: ```python def excenters(A, B, C): results = [] sides = sorted([(distance(A, B),'c'), (distance(B, C),'a'), (distance(C, A),'b')], key=lambda item:item[0]) for i in range(len(sides)): opposite_side_length, side_label = sides[i][0],sides[i][1] adjacent_sides_lengths = list(map(lambda t:t[0],[item for idx,item in enumerate(sides)if idx!=i])) s = sum(adjacent_sides_lengths)/2 Ix = (adjacent_sides_lengths[0]*A[0]+adjacent_sides_lengths[1]*B[0]-opposite_side_length*C[0])/(sum(adjacent_sides_lengths)-opposite_side_length) Iy = (adjacent_sides_lengths[0]*A[1]+adjacent_sides_lengths[1]*B[1]-opposite_side_length) results.append({'label':f'I_{side_label}', 'coords':(round(Ix, 5), round(Iy, 5))}) return results ``` 上述代码实现了对三角形五个特殊点——内心外心重心垂心以及旁的计算[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值