게임 프로그래밍에서 벡터는 너무나도 많이 사용되고 중요한 존재이다.

그런 벡터를 사용한 여러 연산 중 특히나 자주 쓰이고 중요하게 사용되는 두 가지의 연산이 있다.

바로 내적과 외적이다.

 

이번 게시글에선 내적을 알아볼 것이다.

 

벡터의 내적

벡터의 내적은 아래와 같이 점 기호로 표현한다.

$\vec{a} \cdot \vec{b}$

 

내적은 기본적으로, 두 벡터가 가지고 있는 각 원소의 곱의 합이다.

두 벡터를 아래와 같이 정의해보자.

$\vec{a} = \left \{ a_1, b_1, c_1 \right \}, \vec{b} = \left \{ a_2, b_2, c_2 \right \}$

 

두 벡터를 내적하게 되면 아래와 같다.

$\vec{a} \cdot \vec{b} = a_1 \times a_2\, + \,b_1 \times b_2 \,+\, c_1 \times c_2$

 

내적의 특징은 결과값이 스칼라로 나온다는 것이다.

더보기

벡터 : 방향, 크기를 모두 가지고 있다.

ex) {1, 3} , {2, 5, 7}, {5, -1} ....

 

스칼라 : 크기만 가지고 있다.

ex) 3, 6, 8.4, 1.6 .... 

내적 연산에는 몇 가지 성질이 있다.

 

1. 교환법칙이 성립한다.

$\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a}$

 

2.분배법칙이 성립한다.

$\vec{a} \cdot \left ( \vec{b}\,+\, \vec{c} \right ) = \vec{a}\cdot \vec{b} + \vec{a}\cdot \vec{c}$

 

3. 영벡터와의 내적은 결과값이 반드시 0이다.

$\vec{0}\cdot \vec{a} = 0$

 

4. 같은 벡터를 내적하면, 해당 벡터 길이를 제곱한 값이 나온다.

$\vec{a}\cdot \vec{a} = \left | a \right |^2$

 

이 외에도 여러 성질이 있지만, 일단 여기까지만 알아보도록 하자.

 

내적에서 중요한 것은 아래의 공식이다.

$\vec{a}\cdot \vec{b} = | \vec{a} |\times| \vec{b}|  \times cos(\theta)$

 

두 벡터의 내적은 두 벡터의 길이와 두 벡터의 사잇각(theta)의 cos값을 곱한 것과 같다.

 

아래는 증명과정이다. 

더보기

 

제 2 코사인 법칙을 활용하면, 아래 공식을 유도할 수 있다.

$\vec{a} - \vec{b}|^2 = \left | \vec{a} \right |^{2} + |\vec{b}|^{2} - 2|a||b|cos(\theta )$

 

위에서 설명한 내적의 성질을 활용하면, 좌항에 대해 아래와 같은 식을 유도할 수 있다.

$|\vec{a} - \vec{b}|^2 = |\vec{a} - \vec{b}|\cdot |\vec{a} - \vec{b}|$

$|\vec{a} - \vec{b}|\cdot |\vec{a} - \vec{b}| = |\vec{a}|^2 -2\times \vec{a}\cdot \vec{b} + |\vec{b}|^2$

 

이제, 두 식을 합쳐보자.

$ |\vec{a}|^2 -2\times \vec{a}\cdot \vec{b} + |\vec{b}|^2 = \left | \vec{a} \right |^{2} + |\vec{b}|^{2} - 2|a||b|cos(\theta )$

 

식을 정리하면 아래와 같다.

$\vec{a}\cdot \vec{b}= |a||b|cos(\theta )$

위의 공식을 활용하면 두 벡터의 내적을 이용해, 두 벡터 사이의 각도를 구할 수 있다는 것이다.

게임 수학에서 두 벡터 사이의 각도를 구해야하는 일은 상당히 많다.

 

예를 들면, 빛의 방향벡터와 물체의 법선벡터의 사잇각을 이용해 굴절, 반사 등의 효과를 적용하기도 하고, 플레이어와 적의 위치관계를 알아내는데에도 사용된다.

+ Recent posts