Вам нужно уменьшить p3, если это> = poly.size (), а не просто>.
Редактировать: код Python для проверки
#!/usr/bin/python
import math
p = ((0,0),(0,1),(1,1),(1,0))
for i in xrange(4):
p1 = (i + 3) % 4
p2 = i
p3 = (i + 1) % 4
a = math.atan2(p[p2][1] - p[p1][1], p[p2][0] - p[p1][0])
b = math.atan2(p[p3][1] - p[p2][1], p[p3][0] - p[p2][0])
print (a-b)*180/math.pi
И запустить его:
$ ./tmp.py
90.0
90.0
90.0
-270.0