04. 네 번째 수업: 나를 향해 날아오는 과녁, 벡터의 뺄셈 (Vector Subtraction)

우주선 A(나) 와 우주선 B(적기) 가 레이더에 떴습니다. 내비게이션 모니터를 보니 원점 기지국 배꼽$(0,0)$ 에서부터 계산된 내 우주선의 위치는 벡터 $\vec{a} \ [3, 2]$ 에 떠 있고, 적기의 위치는 벡터 $\vec{b} \ [7, 5]$ 에 떠 있습니다.

당신은 우주선 A의 조종석에 앉아 미사일 버튼을 쥐고 있습니다. “과연 내 모니터 콕핏 시야에서 바라볼 때, 저 적기 B를 향해 날아가야 하는 미사일 발사 궤적(화살표) 에임은 어떻게 잡아야 하는가?” 이 에임(Aiming) 조준선의 거리를 재는 파이썬 코드가 바로 “벡터의 뺄셈 (Vector Subtraction)” 입니다.


1. 뺄셈의 역발상 해킹: “마이너스는 방항을 180도 뒤집어 깐 복제품이다!”

화살표에서 뺄셈을 도대체 머리로 어떻게 렌더링해야 할까요? 위대한 해커들은 뺄셈을 따로 정의하지 않습니다. 그냥 180도 리버스(Reverse) 방향 턴 스크립트를 먹이고 덧셈 엔진에 던져버립니다!

$\mathbf{\vec{a} - \vec{b}}$ 이것의 기하학적 정체는? ”$\mathbf{\vec{a} + (-\vec{b})}$” 와 같다!

$- \vec{b}$ 가 뭘까요? 원래 $\vec{b}$ 화살표가 북동쪽으로 대가리를 치켜세우고 있었다면, 그 몽둥이는 제자리에 그대로 둔 채 화살촉의 앞뒤 머리 방향만 남서쪽으로 $180^\circ$ 완전 거꾸로 까뒤집어 버리는 물리적인 역방향 모드를 뜻합니다! (크기 막대 길이는 동일하게 유지!)

즉, 뺄셈 화면 렌더링은 앞서 배운 [꼬리 물기 덧셈법] 의 재활용입니다.

  1. 첫 번째 화살표 $\vec{a}$ 를 그린다.
  2. 빼려는 두 번째 화살표 $\vec{b}$ 의 대가리를 $180^\circ$ 거꾸로 휙! 까뒤집어 반전시킨다. ($-\vec{b}$ 로 변신)
  3. 그 까뒤집힌 역주행 화살표의 꼬리를 콱 쥐고 $\vec{a}$ 의 끝에 붙여 콤보로 갈겨버리면 그것이 곧 뺄셈이다!

2. 전투기 레이더 타겟팅 (Targeting): 종점에서 시점 빼기

하지만 3D 게임 엔진에서 우표 딱지 뒤집듯 매번 $180^\circ$ 반전 그래픽을 렌더링 할 시간은 없습니다. 사실 벡터의 뺄셈 $\mathbf{\vec{b} - \vec{a}}$ 는 훨씬 소름 돋게 섹시하고 직관적인 화살표 기믹 하나를 모니터에 터뜨립니다.

“두 화살표의 출발 꼬리 엉덩이를 원점 배꼽 한 점(기지국) 에 강제 결박해 묶어둬라. 그리고 나서! $\mathbf{\vec{b} - \vec{a}}$ 란 무엇인가? 바로 빼는 놈 **$\vec{a}$ (내 우주선 과녁 위치, 시점) 정수리에서부터 $\rightarrow$ 빼짐을 당하는 놈 $\vec{b}$ (맞출 적기 타겟 위치, 종점) 정수리를 향해 다이렉트로 내다 꽂아버리는 살인 미사일 궤적 화살표 하나를 직통으로 찍! 그어버린 것과 $100\%$ 똑같다!”**

  • 즉, 도착 타겟($\vec{b}$) $\ - \ $ 출발 베이스($\vec{a}$) $\rightarrow$ “A 에서부터 B 를 향해 쏘아라!” 라는 한 문구로 완벽하게 런타임이 떨어집니다. 항상 헷갈리죠? “종점표적 - 시점출발지” 배열만 기억하십시오! 목표 스코어에서 현재 내 꼬라지 베이스 스코어를 빼야, 남은 등반 퀘스트 루트 궤적이 산출되니까요.

A에서 B로 쏘아지는 미사일 벡터 타겟팅 HUD

3. 배열 코드 데이터로 해킹하기

자, 아까 인트로의 좌표 데이터 코드를 뺄셈 배열 함수로 부숴버립시다.

  • 출발 콕핏 좌표(나): $\vec{a} = [3,\ 2]$
  • 록온(Lock-on) 타겟 레이더(적기): $\vec{b} = [7,\ 5]$

“내 우주선에서 적 우주선으로 날아가는 미사일 가이드 궤적 화살표는?” = (타겟) $-$ (나) = $\mathbf{\vec{b} - \vec{a}} = \mathbf{[7 - 3, \ 5 - 2]} = \mathbf{[4, \ 3]}$

정답 로딩: “파이썬 각도기 렌더링 제군들! 내 위치에서 미사일을 조준할 때, 모니터 오른쪽으로 $4$칸! 위쪽으로 $3$칸! 기울인 대각선 앵글 각도로 발사 버튼을 눌러라!”

이 얼마나 완벽하게 가볍고 아름다운 뺄셈 압축 코드입니까! 이제 방향 제어를 끝냈으니, 미사일 몽둥이 크기 자체를 파워 스위치로 뻥튀기하는 무지막지한 치트, [스칼라배(배율) 곱셈] 필터로 5장에서 터보 부스터를 켜 봅시다.

서브목차