Ich versuche winkel von vielecken zu berechnen. dafür hab ich die funktion:
Code: Alles auswählen
from math import atan, pi
def angle(A,B,C):
try:
gradAB = (A[1]-B[1])/(A[0]-B[0])
gradAB = atan(gradAB)
except ZeroDivisionError:
gradAB = 0.5*pi
try:
gradBC = (C[1]-B[1])/(C[0]-B[0])
gradBC = atan(gradAB)
except ZeroDivisionError:
gradBC = 0.5*pi
if B[0] > C[0]:
gradBC = pi + gradBC
if B[0] > A[0]:
gradAB = pi + gradAB
return (gradBC-gradAB)%(2*pi)
Hier hab ich aber ein problem von dem ich nicht weiß ob das ein messfehler oder ein fehler in der funktion ist.
Wenn ich die winkel von dem Dreieck A(0,0) B(2,-5) und C(-3,-4) addiere habe ich 4,5% abweichung von pi:
Code: Alles auswählen
>>> for seq in [[(0.0, 0.0), (2.0, -5.0), (-3.0, -4.0)], [(2.0, -5.0), (-3.0, -4.0), (0.0, 0.0)], [(-3.0, -4.0), (0.0, 0.0), (2.0, -5.0)]]:
print angle(*seq)
0.318230501759
0.00250551903374
2.96198973925
>>> 2.96198973925+0.00250551903374+0.318230501759
3.28272576004274
>>> 3.28272576004274/pi
1.0449240630518024