게임 수학 - 벡터) 복습을 위해 작성하는 글 2023-04-03
📒 갈무리 - 벡터
📌 벡터란?
- 크기와 방향을 가지고 있는 것
- 점 A(0, 1)에서 B(3, 2)로 가는 것을 AB벡터라 한다.
- AB벡터 = B-A = (3, 2) - (0, 1) = (3, 1)
- x는 3만큼, y는 1만큼 이동하는 벡터
- 벡터의 크기 : √(x² + y²)
📌 방향벡터(크기 1)
- 방향벡터 = →AB(AB벡터) / |→AB|(AB벡터의 크기) = 길이가 1인 방향벡터
- 방향벡터를 구하는 방법은 굉장히 중요하기 때문에 숙지해야 한다.
📌 벡터의 연산
→A(5, 3) + →B(5, -1) = (5, 3) + (5, -1) = (10, 2)
→-A = (-5, -3)
→A - →B = →A + (→-B) = (5, 3) + (-5, 1) = (0, 4)
✔ 요약
점A(x1, y1), 점B(x2, y2)가 있을 때,
→AB = (x2 - x1, y2 - y1) = B - A
|→AB| = √((x2 - x1)² + (y2 - y1)²)
→C = →AB / |→AB| = (cosΘ, sinΘ)
|→C| = 1
🎯 그렇다면 게임에서 어떻게 활용할 수 있을까?
- 어떤 오브젝트에 힘을 가했을 때 어떻게 영향을 받을 지 예상할 수 있다.
- ex) 오른쪽으로 걸어가는 캐릭터가 위쪽으로 부는 바람을 만났을 때 : 사람의 벡터와 바람의 벡터를 더한 벡터를 계산할 수 있어야 한다.
💎 핵심
- 벡터끼리 영향을 줄 때 어떤 벡터가 그려질지 예상할 수 있어야 한다.
📌 백터의 내적
- 벡터의 내적이란, 벡터의 방향이 일치하는 만큼 곱하는 것인데, 예를 들어 방향이 같다면 벡터의 크기를 곱하면 될 것이고, 두 벡터가 이루는 각이 90도일 때는 일치하지 않기 때문에 0이다.
→a · →b = x1x2 + y1y2 (스칼라)
→a · →b = |→a||→b|cosΘ (교환법칙 성립)
x1x2 + y1y2 = |→a||→b|cosΘ
→a · →b > 0 (0 <= Θ < 90)
→a · →b = 0 (Θ = 0)
→a · →b < 0 (90 < 0 <= 180)
→a · →b > cosΘ이라면 포함(범위안에 들어옴, 이 경우에는 a와 b가 방향벡터여야 함)
🎯 그렇다면 게임에서 어떻게 활용할 수 있을까?
- 어떠한 장애물들을 감지하고자 할 때, 내가 감지하고자 하는 범위(cosΘ)보다 두 벡터(방향벡터)의 내적 한 값이 크다면 범위 내에 들어와있다고 할 수 있다.
📌 벡터의 외적
- 벡터의 외적이란, 벡터의 회전을 의미한다.
- 벡터의 방향은 오른손 법칙을 따르는데, 앞에 있는 벡터를 기준으로 뒤에 있는 벡터로 회전할 때, 방향은 위쪽이 된다.
→a x →b = (y1z2 - z1y2, x1z2 - z1x2, x1y2 - x2y1)
→a x →b의 결과값은 수직한 벡터가 나오게 된다.
|→a x →b|(외적의 크기) = |→a||→b|sinΘ(스칼라)
→a와 →b를 외적의 크기는 →a와 →b가 이루고 있는 평행사변형의 넓이를 구할 수 있다.
→a x →b != →b x →a (교환법칙 성립X)
📌 2D 게임에서의 외적
- z값이 0
→a x →b = (0, 0, x1y2 - x2y1)
→a x →b의 값이 양수일 경우 반시계 방향
→a x →b의 값이 음수일 경우 시계 방향