您可以使用單位圓上兩點之間的平方歐氏距離和以獲得兩個角度之間的絕對差值:
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