이 튜토리얼에서는 파이썬을 사용해 두 삼각형이 서로 닮았는지 판정하는 프로그램을 만들어 봅니다. 삼각형의 닮음 조건은 크게 SSS(세 변의 비가 모두 같음), SAS(두 변의 비가 같고 끼인각이 같음), AAA(세 각이 모두 같음) 세 가지가 있으며, 각 정리에 해당하는 조건들을 코드로 검사하면 됩니다.
닮음 판정 조건 정리
- SSS 닮음: 세 쌍의 대응변 길이의 비가 모두 일치할 때 두 삼각형은 닮습니다.
- SAS 닮음: 두 쌍의 대응변 길이의 비가 일치하고, 그 사이의 끼인각의 크기가 같을 때 닮습니다.
- AAA 닮음: 세 쌍의 대응각의 크기가 모두 같을 때 닮습니다.
예제 코드
아래 코드에서는 각 판정 조건을 하나의 함수로 분리해 구현했습니다. 변의 길이와 각의 크기를 먼저 정렬한 뒤, 대응하는 값들의 비율과 크기를 비교하는 방식입니다.
def side_side_side(sides_one, sides_two):
# 두 리스트를 같은 순서로 정렬
sides_one.sort()
sides_two.sort()
# 조건 검사
if sides_one[0] / sides_two[0] == sides_one[1] / sides_two[1] \
and sides_one[1] / sides_two[1] == sides_one[2] / sides_two[2]:
return True
return False
def side_angle_side(sides_one, sides_two, angles_one, angles_two):
# 두 리스트를 같은 순서로 정렬
sides_one.sort()
sides_two.sort()
angles_one.sort()
angles_two.sort()
# 조건 1 검사
if sides_one[0] / sides_two[0] == sides_one[1] / sides_two[1]:
if angles_one[0] == angles_two[0]:
return True
# 조건 2 검사
if sides_one[1] / sides_two[1] == sides_one[2] / sides_two[2]:
if angles_one[1] == angles_two[1]:
return True
# 조건 3 검사
if sides_one[2] / sides_two[2] == sides_one[0] / sides_two[0]:
if angles_one[2] == angles_two[2]:
return True
# 위 조건 중 어느 것도 만족하지 않으면 False 반환
return False
def angle_angle_angle(angles_one, angles_two):
# 두 리스트를 같은 순서로 정렬
angles_one.sort()
angles_two.sort()
# 조건 검사
if angles_one[0] == angles_two[0] \
and angles_one[1] == angles_two[1] \
and angles_one[2] == angles_two[2]:
return True
return False
if __name__ == '__main__':
# 변의 길이 초기화
sides_one = [2.0, 3.0, 3.0]
sides_two = [4.0, 6.0, 6.0]
# 각의 크기 초기화
angles_one = [80.0, 60.0, 40.0]
angles_two = [40.0, 60.0, 80.0]
# 각 성질을 검사하고 결과 출력
print("Triangles are similar by:", end=' ')
if side_side_side(sides_one, sides_two):
print("SSS", end=' ')
if side_angle_side(sides_one, sides_two, angles_one, angles_two):
print("SAS", end=' ')
if angle_angle_angle(angles_one, angles_two):
print("AAA", end='')
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Triangles are similar by: SSS SAS AAA
마무리
예제의 두 삼각형은 모든 변의 비가 1:2로 같아 SSS 조건을 만족하고, 각도 역시 40°, 60°, 80°로 동일하기 때문에 SAS와 AAA 조건도 함께 충족합니다. 참고로 실수 나눗셈에서 발생할 수 있는 부동소수점 오차를 피하려면 math.isclose() 함수로 비교하는 것이 더 안전합니다. 튜토리얼 내용에 대해 궁금한 점이 있다면 댓글로 남겨 주세요.