出错代码位置:
np.arccos(cos_value) * (180 / np.pi)
def get_cross_angle(l1, l2):
arr_a = np.array([(l1.p2.x - l1.p1.x), (l1.p2.y - l1.p1.y)]) # 向量a
arr_b = np.array([(l2.p2.x - l2.p1.x), (l2.p2.y - l2.p1.y)]) # 向量b
cos_value = (float(arr_a.dot(arr_b)) / (np.sqrt(arr_a.dot(arr_a)) * np.sqrt(arr_b.dot(arr_b)))) # 注意转成浮点数运算
print(cos_value > 1)
print(cos_value)
return np.arccos(cos_value) * (180 / np.pi) # 两个向量的夹角的角度, 余弦值:cos_value, np.cos(para), 其中para是弧度,不是角度出错原因:cos_value值大于1,但是cos_value值只能是[-1, 1]之间。
调试方法:
print(cos_value > 1)
print(cos_value)输出:True,1.0;原因可能是print会将无限接近1的值,置值1.
修正代码:
def get_cross_angle(l1, l2):
arr_a = np.array([(l1.p2.x - l1.p1.x), (l1.p2.y - l1.p1.y)]) # 向量a
arr_b = np.array([(l2.p2.x - l2.p1.x), (l2.p2.y - l2.p1.y)]) # 向量b
cos_value = (float(arr_a.dot(arr_b)) / (np.sqrt(arr_a.dot(arr_a)) * np.sqrt(arr_b.dot(arr_b)))) # 注意转成浮点数运算
eps = 1e-6
if 1.0 < cos_value < 1.0 + eps:
cos_value = 1.0
elif -1.0 - eps < cos_value < -1.0:
cos_value = -1.0
return np.arccos(cos_value) * (180 / np.pi) # 两个向量的夹角的角度, 余弦值:cos_value, np.cos(para), 其中para是弧度,不是角度
版权声明:本文为jizhidexiaoming原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。