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

【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°)。

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

http://www.xdnf.cn/news/5006.html

相关文章:

  • 大物重修之浅显知识点
  • ch09 课堂参考代码
  • 【MySQL】数据库的数据类型
  • AI Engine Kernel and Graph Programming--知识分享3
  • NumPy 2.x 完全指南【六】根据现有数据创建数组
  • vue搭建+element引入
  • 解决SQL Server SQL语句性能问题(9)——正确使用索引
  • Apollo 可观测性最佳实践
  • 从零开始理解FlashAttention:算法细节图解
  • [docker基础二]NameSpace隔离实战
  • 对于Redis集群部署模式的不同实现
  • Vulfocus靶场-文件上传-2
  • 【速通RAG实战:检索】7.RAG混合检索与重排序技术
  • 【优选算法】二分查找
  • Windows 下 dll转换成lib
  • djinn: 3靶场渗透
  • 城市客运安全员备考练习题
  • 4.3java工具类Objects,Arrays
  • PMIC电源管理模块的PCB设计
  • 124549-23-1,PBFI AM,测定细胞内区隔的钾离子水平变化
  • 全球实物文件粉碎服务市场洞察:合规驱动下的安全经济与绿色转型
  • 2022-2025年全国路网数据分享
  • C++AVL树
  • 计算机二级(C语言)已过
  • HarmonyOS开发-组件市场
  • 提升研发运维效能:Pacvue 泊客电商的 GenAI 技术实践
  • 从0开始学linux韦东山教程第一三章问题小结(1)
  • wsl - install RabbiqMQ
  • 2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)
  • 【Python】超全常用 conda 命令整理