Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 두 삼각형의 닮음 판정하기: SSS·SAS·AAA 조건 확인 프로그램


이 튜토리얼에서는 파이썬을 사용해 두 삼각형이 서로 닮았는지 판정하는 프로그램을 만들어 봅니다. 삼각형의 닮음 조건은 크게 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() 함수로 비교하는 것이 더 안전합니다. 튜토리얼 내용에 대해 궁금한 점이 있다면 댓글로 남겨 주세요.