Skip to content Skip to sidebar Skip to footer

Finding If A Triangle Is Right-angled Or Not

This Python 3 based function returns if a triangle is or isn't right-angled given side lengths x, y, and z. I'm having an issue simplifying the conditional statement. Should this f

Solution 1:

Your function is completely wrong.

You cannot find angle as ratio of a side and perimeter.

Expression if one and two does not calculate sum - and here is logical (boolean) operator.

To find whether rectangle is right, you can exploit Pythagorean theorem

def right_angled(a, b,c):if(a*a+b*b==c*c) or (c*c+b*b==a*a) or (a*a+c*c==b*b):return"The triangle is right-angled."else:return"The triangle is not right-angled."

Or just return boolean result

return(a*a+b*b==c*c) or (c*c+b*b==a*a) or (a*a+c*c==b*b)

Solution 2:

I suggest using the Pythagorean theorem to achieve this (a^2+b^2=c^2) by testing the 3 combinations of side lengths. To compensate for floating point imprecision, compare within a range:

def right_angled(a, b,c, e):returnabs(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

However, the range depends on the scale of the side lengths, i.e., small triangles pass the test more easily than big triangles. For example, any triangle with side length ~0.01 will pass the test if e=0.01. For this reason, it is safer (but more expensive) to normalize the side lengths using the formula (a^2+b^2)/c^2=1

def right_angled(a, b,c, e):returnc>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

Post a Comment for "Finding If A Triangle Is Right-angled Or Not"