【python】Calculate the Angle of a Triangle
要计算三个点形成的三角形每个角的角度,可以按照以下步骤进行:
-
计算边的长度:使用欧几里得距离公式计算三角形三边的长度。
-
应用余弦定理:对于每个角,使用余弦定理计算角度。余弦定理公式为:
c o s ( θ ) = a 2 + b 2 − c 2 2 a b cos(\theta) = \frac{a^2 + b^2 - c^2}{2ab} cos(θ)=2aba2+b2−c2
其中 θ \theta θ 是角, a a a 和 b b b 是角的两边, c c c 是对边。
python 代码实现
import mathdef calculate_angle(a, b, c):"""计算三角形中顶点b的角度(使用余弦定理):param a: 点a的坐标 (x, y):param b: 点b的坐标 (x, y):param c: 点c的坐标 (x, y):return: 顶点b的角度(弧度制)"""# 计算边长ba = math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)bc = math.sqrt((c[0] - b[0])**2 + (c[1] - b[1])**2)ac = math.sqrt((a[0] - c[0])**2 + (a[1] - c[1])**2)# 应用余弦定理cos_theta = (ba**2 + bc**2 - ac**2) / (2 * ba * bc)# 处理浮点数精度问题,确保cos_theta在[-1, 1]范围内cos_theta = max(min(cos_theta, 1.0), -1.0)angle = math.acos(cos_theta)return angledef calculate_triangle_angles(p1, p2, p3):"""计算三角形三个顶点的角度:param p1: 点1的坐标 (x, y):param p2: 点2的坐标 (x, y):param p3: 点3的坐标 (x, y):return: 三个角度(弧度制),按p1, p2, p3的顺序"""angle1 = calculate_angle(p2, p1, p3) # 角1在p1angle2 = calculate_angle(p1, p2, p3) # 角2在p2angle3 = calculate_angle(p1, p3, p2) # 角3在p3return angle1, angle2, angle3# 示例使用
if __name__ == "__main__":# 三个点的坐标(示例)point_a = (0, 0)point_b = (1, 0)point_c = (0, 1)# 计算角度angle_a, angle_b, angle_c = calculate_triangle_angles(point_a, point_b, point_c)# 转换为角度制angle_a_deg = math.degrees(angle_a)angle_b_deg = math.degrees(angle_b)angle_c_deg = math.degrees(angle_c)print(f"角A: {angle_a_deg:.2f}°")print(f"角B: {angle_b_deg:.2f}°")print(f"角C: {angle_c_deg:.2f}°")
代码说明:
calculate_angle
函数:计算顶点 b 的角度。通过计算三边长度,应用余弦定理得到角度(弧度制)。
calculate_triangle_angles
函数:分别计算三个顶点的角度。
math.degrees
可以把弧度转为角度
示例:计算直角三角形的三个角度(45°, 90°, 45°)。
上面的例子用的笛卡尔坐标系,也适用于图像坐标系(原点在左上角)