Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Similar Triangles by robertabegg
from typing import List, Tuple
from math import sqrt
Coords = List[Tuple[int, int]]
def coord_len(x1, y1, x2, y2):
""" Returns length between two pairs of coordinates"""
return sqrt(((x1 - x2) ** 2) + ((y1 - y2) ** 2))
def tri_len(c: Coords) -> List:
""" Returns list of lengths of each side of a triangle"""
r = [coord_len(*c[0], *c[1]), coord_len(*c[1], *c[2]), coord_len(*c[2], *c[0])]
return r
def similar_triangles(coords_1: Coords, coords_2: Coords) -> bool:
""" Returns True if the two triangles are similar - if lengths of each side are of the same ratio """
ratios = [round(ln1/ln2, 10) for ln1, ln2 in zip(sorted(tri_len(coords_1)), sorted(tri_len(coords_2)))]
return len(set(ratios)) == 1
if __name__ == '__main__':
print("Example:")
print(similar_triangles([(0, 0), (1, 2), (2, 0)], [(3, 0), (4, 2), (5, 0)]))
# These "asserts" are used for self-checking and not for an auto-testing
assert similar_triangles([(0, 0), (1, 2), (2, 0)], [(3, 0), (4, 2), (5, 0)]) is True, 'basic'
assert similar_triangles([(0, 0), (1, 2), (2, 0)], [(3, 0), (4, 3), (5, 0)]) is False, 'different #1'
assert similar_triangles([(0, 0), (1, 2), (2, 0)], [(2, 0), (4, 4), (6, 0)]) is True, 'scaling'
assert similar_triangles([(0, 0), (0, 3), (2, 0)], [(3, 0), (5, 3), (5, 0)]) is True, 'reflection'
assert similar_triangles([(1, 0), (1, 2), (2, 0)], [(3, 0), (5, 4), (5, 0)]) is True, 'scaling and reflection'
assert similar_triangles([(1, 0), (1, 3), (2, 0)], [(3, 0), (5, 5), (5, 0)]) is False, 'different #2'
print("Coding complete? Click 'Check' to earn cool rewards!")
Sept. 2, 2021