作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个名为 analyze_the_shape
的函数它采用 2D 顶点列表,使得该列表按照 2D 欧几里德空间中的顶点顺时针遍历的顺序排列。
我在解释器中调用它并给出 [(0, 0), (0, 4.0), (4.0, 4.0), (4.0, 0)]
作为输入,但我得到 ValueError : math domain error
。我期望看到return ["SQUARE", 4.0]
。我能做些什么 ?
import math
def analyze_the_shape(liste):
if len(liste) == 2 :
d = ( (liste[1][0] - liste[0][0])**2 + (liste[1][1] - liste[0][1])**2 )**(0.5)
return ["LINESEGMENT", d ]
if len(liste) == 4 :
d1 = abs(( (liste[1][0] - liste[0][0])**2 + (liste[1][1] - liste[0][1])**2 )**(0.5))
d2 = abs(( (liste[2][0] - liste[1][0])**2 + (liste[2][1] - liste[1][1])**2 )**(0.5))
d3 = abs(( (liste[3][0] - liste[2][0])**2 + (liste[3][1] - liste[2][1])**2 )**(0.5))
d4 = abs(( (liste[0][0] - liste[3][0])**2 + (liste[0][1] - liste[3][1])**2 )**(0.5))
hypo = abs(( (liste[2][1] - liste[0][1])**2 + (liste[2][0] - liste[0][0])**2 )**(0.5))
cos_angle = float((hypo**2 - (d3)**2 + (d4)**2) / ((-2.0)*(d4)*(d3)))
angle = math.degrees(math.acos(cos_angle))
if d1 == d2 == d3 == d4 and abs(angle - 90.0) < 0.001 :
return ["SQUARE", d1]
这是我得到的错误:
>>> import a
>>> a.analyze_the_shape([(0, 0), (0, 4.0), (4.0, 4.0), (4.0, 0)])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "a.py", line 15, in analyze_the_shape
ValueError: math domain error
最佳答案
此异常意味着 cos_angle
不是 math.acos
的有效参数。
具体来说,在本例中,它正好低于 -1,这超出了 acos
定义。
您可能会尝试使用以下内容强制返回的 cos_angle
位于 [-1,1]
内:
def clean_cos(cos_angle):
return min(1,max(cos_angle,-1))
但是,这不会返回 SQUARE
,因为 cos_angle
在您的示例中或多或少等于 -1
,并且 因此角度
等于180
。异常发生之前您的计算可能存在问题。
关于python - 为什么我会收到 ValueError : math domain error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637400/
我是一名优秀的程序员,十分优秀!