Tôi đã viết một hàm có tên analyze_the_shape
lấy danh sách các đỉnh 2D sao cho danh sách theo thứ tự của một chiều ngang theo chiều kim đồng hồ của các đỉnh trong không gian 2D Euclide.Tại sao tôi nhận được ValueError: lỗi miền toán học?
Tôi gọi điện thoại trong thông dịch viên và cung cấp [(0, 0), (0, 4.0), (4.0, 4.0), (4.0, 0)]
làm đầu vào nhưng tôi nhận được ValueError : math domain error
. Tôi hy vọng sẽ thấy return ["SQUARE", 4.0]
. Tôi có thể làm gì ?
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]
Đây là lỗi tôi nhận được:
>>> 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
'abs (góc - 90.0) <0,001' và' abs (cos_angle + 1) <0,001' không có nghĩa là giống nhau. Nếu 'góc = 90',' cos_angle = 0'. Nếu 'cos_angle = -1',' angle = 180'. –
Bắt tốt! Tôi nghĩ rằng có một lỗi mà OP đặt 'cos_angle' - tôi đã chỉ ra rằng trong câu trả lời của tôi. –
"cách cửa hàng Python' cos_angle' không hoàn hảo ". Điều này nên "các con số điểm trôi nổi được biểu diễn trên một máy tính không hoàn hảo, và do đó các lỗi tính toán là không thể tránh khỏi". Python hoàn toàn không có gì để làm với điều này. – Bakuriu