当前位置: 首页 > news >正文

【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+b2c2

其中 θ \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°)。

上面的例子用的笛卡尔坐标系,也适用于图像坐标系(原点在左上角)

相关文章:

  • 为啥大模型一般将kv进行缓存,而q不需要
  • 量化解析美英协议的非对称冲击:多因子模型与波动率曲面重构
  • Spring Boot初级教程:从零搭建企业级Java应用
  • Linux 学习笔记2
  • Spark,在shell中运行RDD程序
  • 数据结构(1)复杂度
  • Git回顾
  • 关于VScode的调试
  • DVWA靶场保姆级通关教程--07SQL注入(上)
  • JVM之内存管理(一)
  • Servlet、HttpServlet 和 DispatcherServlet 区别与关系
  • 鸿蒙开发:dialog库做了一些优化
  • htmlUnit和Selenium的区别以及使用BrowserMobProxy捕获网络请求
  • 住宅IP的深度解析与合理运用
  • 聊聊Spring AI autoconfigure模块的拆分
  • 在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程
  • DeepSeek“智”造:解锁旅游行业新玩法
  • stm32F103芯片 实现PID算法控制温度例程
  • AI文旅|暴雨打造旅游新体验
  • PostgreSQL技术内幕30:Heap Only Tuple(HOT)原理解析
  • 这群“工博士”,把论文“写”在车间里
  • 德国放弃长期以来的反核立场,寻求修复德法合作关系
  • 国家发改委谈整治“内卷式”竞争:加力破除地方保护和市场分割,遏制落后产能无序扩张
  • 俄罗斯哈巴罗夫斯克市首次举办“俄中论坛”
  • 国家话剧院上海演出季7月重启,《大宅门》等5部大戏来沪
  • 让中小学生体验不同职业,上海中高职院校提供超5万个体验名额