您可以使用单位圆上两点之间的平方欧氏距离和以获得两个角度之间的绝对差值:
from math import sin, cos, acos
from unittest import assertAlmostEqual
def assertAlmostEqualAngles(x, y, **kwargs):
c2 = (sin(x)-sin(y))**2 + (cos(x)-cos(y))**2
angle_diff = acos((2.0 - c2)/2.0) # a = b = 1
assertAlmostEqual(angle_diff, 0.0, **kwargs)
这适用于弧度。如果角度为度,你必须做一个转换:
from math import sin, cos, acos, radians, degrees
from unittest import assertAlmostEqual
def assertAlmostEqualAngles(x, y, **kwargs):
x,y = radians(x),radians(y)
c2 = (sin(x)-sin(y))**2 + (cos(x)-cos(y))**2
angle_diff = degrees(acos((2.0 - c2)/2.0))
assertAlmostEqual(angle_diff, 0.0, **kwargs)
定义自己的辅助函数,它有两个角,并返回ABS的区别 – matcheek 2014-12-02 17:17:06
的每当你比较浮点数,你必须包括一个“ epsilon',一个小数字,低于该数字的所有意图和目的被认为是零。例如:1E-6或1E-8等'a == b如果abs(a - b)<= epsilon。如果两个值接近0,事情就会变得棘手。 – Pierre 2014-12-02 17:43:36