Я предлагаю использовать теорему Пифагора для достижения этого (a^2+b^2=c^2
), протестировав 3 комбинации длин сторон. Чтобы компенсировать неточность с плавающей запятой, сравните в диапазоне:
def right_angled(a, b, c, e):
return abs(a*a+b*b-c*c)<e or abs(b*b+c*c-a*a)<e or abs(c*c+a*a-b*b)<e
Однако диапазон зависит от масштаба длин сторон, то есть маленькие треугольники проходят испытание легче, чем большие треугольники. Например, любой треугольник с длиной стороны ~0.01
пройдет тест, если e=0.01
. По этой причине безопаснее (но дороже) нормализовать длину сторон по формуле (a^2+b^2)/c^2=1
def right_angled(a, b, c, e):
return c>0 and abs(1-(a*a+b*b)/(c*c))<e or \
a>0 and abs(1-(b*b+c*c)/(a*a))<e or \
b>0 and abs(1-(c*c+a*a)/(b*b))<e