Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Similar Triangles by bartholomewbrokka
import math
from typing import List, Tuple
Coords = List[Tuple[int, int]]
def get_cosines(v):
sides = []
for i in range(3):
sides.append(math.hypot((v[i][0] - v[(i + 1) % 3][0]),
(v[i][1] - v[(i + 1) % 3][1])))
cosines = set()
for i in range(3):
a, b, c = sides[i], sides[(i + 1) % 3], sides[(i + 2) % 3]
cosines.add(round(
(math.pow(a, 2) + math.pow(b, 2) - math.pow(c, 2))/
(2 * a * b),
5))
return cosines
def similar_triangles(coords_1: Coords, coords_2: Coords) -> bool:
return get_cosines(coords_1) == get_cosines(coords_2)
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!")
Feb. 7, 2021