게임 프로그래밍에서 벡터는 너무나도 많이 사용되고 중요한 존재이다.
그런 벡터를 사용한 여러 연산 중 특히나 자주 쓰이고 중요하게 사용되는 두 가지의 연산이 있다.
바로 내적과 외적이다.
이번 게시글에선 내적을 알아볼 것이다.
벡터의 내적
벡터의 내적은 아래와 같이 점 기호로 표현한다.
$\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 )$
위의 공식을 활용하면 두 벡터의 내적을 이용해, 두 벡터 사이의 각도를 구할 수 있다는 것이다.
게임 수학에서 두 벡터 사이의 각도를 구해야하는 일은 상당히 많다.
예를 들면, 빛의 방향벡터와 물체의 법선벡터의 사잇각을 이용해 굴절, 반사 등의 효과를 적용하기도 하고, 플레이어와 적의 위치관계를 알아내는데에도 사용된다.
'게임수학' 카테고리의 다른 글
게임 수학 - 포물선 운동 (0) | 2024.05.09 |
---|---|
게임 수학 - 벡터를 활용하여 방향, 위치 관계 구하기 (1) | 2024.04.02 |