04. 네 번째 수업: 크고 작은 유전자 복제 (닮음, Similarity)

합동(Congruence)이 크기까지 쌍둥이같이 완벽히 똑같은 클론 복제였다면, ‘닮음(Similarity)’은 스마트폰 화면을 두 손가락으로 줌인(Zoom-in), 줌아웃(Zoom-out) 하는 것과 같습니다. 도형을 확대하거나 축소했을 때 원래의 도형과 완전히 겹치게 될 때 우리는 두 도형이 “우주적 닮음 관계 비례($\sim$)를 가졌다”고 부릅니다.


학습 목표

  • 크기는 다르지만 그 내면의 각도와 변의 성장 ‘비율(Proportion)’이 완벽히 똑같이 유지되는 고대 측량(탈레스의 발견)의 중심인 닮음비를 배웁니다.
  • SSS, SAS 닮음 외에도 가장 직관적이고 널리 쓰이는 시야의 마법, AA 닮음 조건을 깨우칩니다.
  • 파이썬의 핵심 자료형인 고정소수점, 실수형(float) 비율 나누기 연산을 통해 픽셀 그래픽의 스케일링(Scaling) 비율을 도출합니다.

1. 줌인/줌아웃의 통제: 일정한 비율의 마법

건축가가 최첨단 랩실에서 손으로 허공의 네온 3D 건물 도면을 줌인하자 닮은꼴 삼각형들이 모양을 유지하며 스케일 업 되는 일러스트

건축가가 설계도면에 $1cm$짜리 방의 도면을 그렸습니다. 그리고 강남 한복판에 실제 건물로 $1000cm$ 짜리 진짜 방을 지었습니다. 이 설계도면과 실제 건물은 $1 : 1000$ 이라는 [닮음비(Ratio of Similitude)]를 가진 완벽한 닮은꼴입니다. 닮음 도형의 절대적인 규칙 두 가지는 다음과 같습니다.

  1. 내부 각도는 절대 안 변한다! 폭주 금지! 설계도의 구석이 $90^\circ$의 직각 박스라면, 건물을 아무리 미국 엠파이어 빌딩 크기로 키워도 그 구석 부분 각도는 여전히 $90^\circ$입니다. 줌인/줌아웃 시 각도는 얼음처럼 고정입니다.
  2. 모든 뼈대는 ‘동시에 같이’ 늘어난다! 바닥 뼈대를 $2$배 늘렸다면? 기둥 뼈대도 반드시 $2$배, 대각선 지붕 뼈대도 반드시 $2$배로 늘려야 전체 틀이 찌그러지지 않고 닮은 삼각형이 됩니다. (이것이 SSS 닮음의 핵심입니다.)

2. 시야의 폭발: AA 닮음 (가장 중요!)

유클리드가 찾은 세 가지 합동 조건(SSS, SAS, ASA)처럼 닮음에도 조건이 있습니다. 그중 기하학 시험과 우주 측정망에서 가장 미친 듯이 활약하는 놈은 바로 ‘AA 닮음 (Angle-Angle)’입니다!

[AA 닮음 조건] “미지의 삼각형과 작은 삼각형을 비교할 때, 변의 길이는 잴 필요조차 없다! 단지 ‘두 개의 각도(Angle 2개)’만 서로 똑같다면?

  • 나머지 한 각은 어차피 합이 180도니까 100% 똑같이 강제 배정될 수밖에 없고!
  • 세 각이 다 일치하면 그 삼각형은 사실상 크기만 다르고 모양이 똑같은 [닮은꼴 복제형상]일 수밖에 없다!

탈레스가 이집트에서 피라미드의 높이를 쟀을 때 쓴 것도 바로 이 AA 닮음 원리였습니다. 태양이 쏘는 각도 하나, 그리고 막대기(그리고 피라미드)가 수직($90^\circ$)으로 땅에 서 있는 각도 하나. 딱 2개의 각도(A-A)가 같았기 때문에, 탈레스는 자로 피라미드 모서리를 잴 필요도 없이 그림자만으로 두 개의 거대한 직각삼각형이 닮음비(일정 비율의 줌인 상태)라는 것을 증명해 버린 것입니다.

3. Python 픽셀 스케일러: 부동소수점 float 스케일링

포토샵(Photoshop) 같은 프로그램에서 이미지 코너를 쥐고 드래그하면 이미지가 깨지지 않고 커집니다. 포토샵 내부에서는 수백만 픽셀의 $X 좌표, Y 좌표$에 파이썬의 실수(Float) 나눗셈 비율(Ratio) 연산을 곱하여 닮음비를 유지하며 그래픽을 팽창시키고 있는 것입니다.

# 파이썬으로 구현하는 안테나/지도의 줌인/줌아웃 (닮음비 추출기)

def calculate_scale_ratio(original_width, original_height, new_width):
    """
    원본 도면의 너비/높이에 맞춰 새로운 설계도 너비가 들어오면 
    찌그러지지 않게(닮음을 유지하며) 새로운 높이를 계산해냅니다.
    """
    
    # 1. 줌인 / 줌아웃 배수(Ratio)를 파기합니다.
    # 파이썬의 나눗셈(/)은 무조건 소수점이 달린 실수형(Float) 결과값을 반환합니다!
    scale_ratio = new_width / original_width
    print(f"-> 📸 감지된 렌즈 강제 줌(Zoom) 배수: x{scale_ratio:.2f}")
    
    # 2. 너비가 저만큼 배수로 팽창했다면? 
    # 높이도 반드시 똑같은 Float 배수로 팽창시켜야 그래픽(삼각형)이 찌그러지지 않고 유지(닮음)됩니다!
    new_height = original_height * scale_ratio
    
    return new_height

# 고대 피라미드 설계 도면. 가로 5cm, 세로 3cm의 미니 피라미드
blueprint_w = 5
blueprint_h = 3

# 파라오의 명령: "가로 밑변을 230미터(23000cm)로 거대하게 확대 건설하라!"
real_world_w = 23000

# 닮음을 유지하는 마법사 파이썬 호출
real_world_h = calculate_scale_ratio(blueprint_w, blueprint_h, real_world_w)

print("=" * 40)
print(f"건설 지시 완료! 가로 축척이 {real_world_w}일 때, 피라미드의 지붕 높이는 {real_world_h}이어야 AA 직각 닮음이 성립하며 찌그러지지 않습니다.")

소수점이 달린 파이썬의 Float 자료형 연산은 이처럼 기하학의 변들의 비율 파편들을 계산하는 메인 엔진이 됩니다. 원시인들은 이 비율을 나누느라 나뭇잎을 세며 고생했겠지만, 컴퓨터는 scale_ratio * 뼈대 명령 하나로 우주 스케일의 좌표를 축적합니다.

학습 정리

  1. 닮음($\sim$)비: 두 다각형의 모서리(각)는 얼음처럼 굳어 일치해야 하고, 모든 변의 길이는 동일한 배수(비율) 곱하기에 의해 늘어나거나 줄어드는 크기 팽창 마법.
  2. AA 닮음 증명: 그 어떤 변의 길이 정보도 필요 없다. 단 2개의 내각만 훔쳐봐서 일치하면, 그 껍데기 선분들은 어쩔 수 없이 닮음꼴(비례식)로 빨려 들어간다.
  3. 파이썬과 C++ 엔진에서는 정수(Integer)가 아닌 float (부동소수점)이라는 나눗셈 연산자(/) 특유의 실수 체계를 통해 $0.24, 1.58$ 같은 다차원 줌 비율을 화면상의 좌표 $X, Y$ 점들에 뿌려(Mapping) 스케일링을 구현한다.
서브목차