使用余弦定理计算反三角函数却报超出定义域 您所在的位置:网站首页 反三角函数为啥要限制值域 使用余弦定理计算反三角函数却报超出定义域

使用余弦定理计算反三角函数却报超出定义域

2024-07-12 19:49| 来源: 网络整理| 查看: 265

使用math.acos计算反三角函数却报超出定义域 1.ERROR2.分析3.解决

1.ERROR

项目里出错的截图找不到了,就用一个示例吧。 在这里插入图片描述

如上,arccos里面的数应该是[-1, 1],理论上来说,三个点组成的三角形计算的话都应该符合这个条件,即使是三个点跑到一条直线上了。

但是,有时候你还会在实际项目中碰到这种情况,那是为什么呢?

2.分析

在实际中,比如视觉方向,一张图像中你检测出的各个点可能在任意一个位置,即便在任意一个位置你的代码也应该能够正常运行。就是因为位置太任意,导致下面的公式计算出来可能不是一个有理数,这样一来,势必在要进行约去或者进位或者说在计算机上转化为二进制的时候转化的不是原数(这方面我也不是很清楚)。这样一来就造成了该值大于1或者小于-1(虽然只是大了很小很小一点点),进而出现超出函数定义域的情况。 在这里插入图片描述 这种情况可能很难想到,因为理论上不会出现这种情况的,但在实际中,任何情况都有可能发生。

3.解决 def norm(x): if x 1: return 1 else: return x cos_A = norm((length_b ** 2 + length_c ** 2 - length_a ** 2) / (2 * length_b * length_c)) cos_B = norm((length_a ** 2 + length_c ** 2 - length_b ** 2) / (2 * length_a * length_c)) cos_C = norm((length_a ** 2 + length_b ** 2 - length_c ** 2) / (2 * length_a * length_b)) print(cos_A, cos_B, cos_C) angle_A = (math.acos(cos_A)) / pi * 180 angle_B = (math.acos(cos_B)) / pi * 180 angle_C = (math.acos(cos_C)) / pi * 180


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有