Skip to content

Instantly share code, notes, and snippets.

@pcalcao
Last active December 11, 2015 10:58
Show Gist options
  • Save pcalcao/4590779 to your computer and use it in GitHub Desktop.
Save pcalcao/4590779 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
def is_triangle(a, b, c):
return not collinear(a, b, c)
def collinear(a, b, c):
return slope(a, b) == slope(b, c)
def slope(point1, point2):
"""
Returns the slope of two points, or none if they have the same 'x' value,
since slope for a vertical line is undefined.
"""
if point1[0] == point2[0]:
return None
else:
return (point1[1] - point2[1]) / (point1[0] - point2[0])
def square_of_distance(pointA, pointB):
return (pointA[0] - pointB[0]) ** 2 + (pointA[1] - pointB[1]) ** 2
def get_distances_squared(a, b, c):
return square_of_distance(a,b), square_of_distance(a,c), square_of_distance(b,c)
def classify_shape(side1, side2, side3):
distances = set([side1, side2, side3])
if len(distances) == 1:
tri_type = "equilateral"
elif len(distances) == 2:
tri_type = "isosceles"
elif len(distances) == 3:
tri_type = "scalene"
return tri_type
def classify_angles(side1, side2, side3):
sides = sorted([side1, side2, side3])
#Pythagorean theorem, and the other cases
if (sides[0] + sides[1]) == sides[2]:
angles_type = "right"
elif (sides[0] + sides[1]) < sides[2]:
angles_type = "obtuse"
else:
angles_type = "acute"
return angles_type
def classify_triangle(a, b, c):
if is_triangle(a, b, c):
side1, side2, side3 = get_distances_squared(a, b, c)
shape = classify_shape(side1, side2, side3)
angles = classify_angles(side1, side2, side3)
print shape + " -> " + angles
else:
print "Not a triangle"
if __name__ == '__main__':
classify_triangle((0, 0), (0, 4), (1, 2))
classify_triangle((1, 1), (1, 4), (3, 2))
classify_triangle((2, 2), (2, 4), (4, 3))
classify_triangle((3, 3), (3, 4), (5, 3))
classify_triangle((4, 4), (4, 5), (5, 6))
classify_triangle((5, 5), (5, 6), (6, 5))
classify_triangle((6, 6), (6, 7), (6, 8))
classify_triangle((7, 7), (7, 7), (7, 7))
#tests:
classify_triangle((0, 1), (0, 2), (0, 3))
classify_triangle((0, 0), (1, 5), (2, 0))
classify_triangle((0, 0), (10, 5), (20, 0))
classify_triangle((0, 0), (0, 5), (5, 0))
classify_triangle((0, 0), (10, 5), (20, 1))
classify_triangle((0, 0), (0, 3), (4, 0))
classify_triangle((0, 0), (2, 4), (4, 1))
classify_triangle((0, 0), (1, 1), (2, 2))
classify_triangle((0, 0), (0, 2), (0, 0))
classify_triangle((0, 0), (0, 2), (0, 1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment