gpt4 book ai didi

python - 为什么我会收到 ValueError : math domain error?

转载 作者:行者123 更新时间:2023-12-02 09:18:02 31 4
gpt4 key购买 nike

我写了一个名为 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com