Skip to content

Commit 06bbe3c

Browse files
committed
Docs: Add GameMath Part
1 parent 0bdcc33 commit 06bbe3c

File tree

4 files changed

+197
-0
lines changed

4 files changed

+197
-0
lines changed

GameMath/Matrix/README.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# 행렬
2+
3+
행과 열로 이뤄진 수의 집합
4+
5+
유니티의 Transform은 행렬로 이뤄져있다.
6+
7+
행렬으로 회전, 이동, 크기 조절을 한다.
8+
9+
이는 행렬의 곱셈으로 이뤄지는데, 이 곱셈은 내적이다. (선형대수학)
10+
11+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/ff178b51-9c6e-4001-8ddc-f6badfab19da)
12+
13+
3차원을 다루기 위해선 4차원 행렬을 사용한다. (그래픽스는 Column Major)
14+
15+
1열은 x축, 2열은 y축, 3열은 z축, 4열은 이동을 나타낸다.
16+
17+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/5b555a35-d022-4e23-bc20-c4a187feea7e)
18+
19+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/0f3bdc6d-2a72-4736-8e2d-b5c0212d825d)
20+
21+
행렬식은 변환의 크기를 나타낸다.

GameMath/Quaternion/README.md

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# 회전
2+
3+
3차원 벡터를 사용하여 회전을 나타내는 방법을 오일러 각이라고 한다.
4+
5+
짐벌락 문제가 발생한다.
6+
7+
한 차원이 자유도를 잃는 상황
8+
9+
따라서 쿼터니언을 사용한다.
10+
11+
- 4개의 원소를 이용해 회전을 나타내는 방법
12+
13+
$$ q = w + xi + yj + zk $$
14+
15+
오일러각은 순차적인 회전이 반면, 쿼터니언은 N차원 공간상에서 한 번에 회전한다.
16+
17+
대신 계산이 매우 복잡함
18+
19+
따라서 헬퍼함수를 사용하여 쿼터니언에 접근한다.
20+
21+
쿼터니언 회전의 추가는 곱셈으로 구현
22+
23+
이유는 행렬연산으로 이뤄지기 때문에 곱셈으로 구현

GameMath/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# GameMath
2+
3+
게임 수학관련 정리 이득우의 게임 수학책 위주로 공부
4+
5+
- [Vector](./Vector/README.md)
6+
- [Matrix](./Matrix/README.md)
7+
- [Quaternion](./Quaternion/README.md)

GameMath/Vector/README.md

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
# Vector
2+
3+
[영상 참고](https://www.youtube.com/watch?v=va6eKs7db4s&t=99s)
4+
5+
벡터는 게임 개발에서 중요한 개념으로 사용된다.
6+
7+
- 크기와 방향으로 정의되는 값
8+
- 방향/거리/속도, 위치를 나타내기 위한 수학적 도구
9+
10+
*스칼라는 크기*
11+
12+
## 표현
13+
14+
- 시점, 종점으로 표현
15+
- 크기가 존재, 방향이 존재
16+
17+
## 성질
18+
19+
- 크기와 방향이 동일하면 동일한 벡터로 취급
20+
- 임의의 벡터 공간에서, 한 벡터와 동일한 벡터는 무수히 많다.
21+
22+
## 상대좌표, 절대좌표
23+
24+
- 상대좌표: 원점을 기준으로 한 좌표
25+
- 절대좌표: 절대적인 좌표
26+
- 벡터 공간내에서 모든 벡터의 시점을 일치시킨다면, 임의의 벡터는 존재하지 않는다. (종점과 일대일 대응된다. 위치벡터)
27+
28+
## 벡터의 덧셈
29+
30+
각 피연산자들의 성분끼리 더한다.
31+
32+
$$ \vec{a} + \vec{b} = \vec{c} $$
33+
$$ \vec{a}(1,4) + \vec{b}(3,2) = \vec{c}(4,6) $$
34+
35+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/57b9cce0-694d-49e5-89e8-e4be88239e14)
36+
37+
## 벡터의 뺄셈
38+
39+
각 피연산자들의 성분끼리 뺀다.
40+
41+
$$ \vec{a} - \vec{b} = \vec{c} $$
42+
$$ \vec{a}(1,4) - \vec{b}(3,2) = \vec{c}(-2,2) $$
43+
44+
벡터의 뺄셈은 벡터 더하기 마이너스 벡터로 표현할 수 있다.
45+
46+
## 벡터의 스칼라 곱
47+
48+
*벡터의 실수배*
49+
50+
각 성분에 스칼라를 곱한다.
51+
52+
$$ k\vec{a} = \vec{c} $$
53+
$$ 3\vec{a}(1,4) = \vec{c}(3,12) $$
54+
55+
## 방향벡터
56+
57+
벡터를 통해 방향과 거리를 포현하는 경우 상당히 비직관저임
58+
59+
따라서 방향*거리로 쪼개어 표현하는 것이 직관적임
60+
61+
방향을 표현하는 벡터를 방향벡터라고 한다. (크기가 1인 벡터)
62+
63+
방향 x 크기 = 벡터
64+
65+
방향벡터를 구하는 방법
66+
67+
- 벡터를 크기로 나눈다.
68+
- 단위벡터를 구한다.
69+
70+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/c125d95e-61dd-43ee-a10c-66b73343ad89)
71+
72+
크기를 구하는 방법
73+
74+
- 벡터의 각 성분을 제곱하여 더한 후 제곱근을 취한다.
75+
76+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/d9a168e9-7e2a-45aa-b68d-dfd18a0105f0)
77+
78+
(3,-4, 0)
79+
80+
$$ \sqrt{3^2 + (-4)^2 + 0^2} = 5 $$
81+
$$ \frac{1}{5}(3,-4,0) = (0.6, -0.8, 0) $$
82+
83+
## 벡터의 내적
84+
85+
두 벡터가 이루는 각을 구하려면 내적을 사용한다.
86+
87+
벡터의 내적은 한 벡터를 다른 벡터에 투영시켜 그 크기를 곱하는 연산
88+
89+
$$ \vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|cos\theta $$
90+
$$ \vec{a} \cdot \vec{b} = a_xb_x + a_yb_y + a_zb_z $$
91+
$$ \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|} = cos\theta $$
92+
93+
- 성질
94+
- 두 벡터가 서로 수직이면 내적의 결과는 0이다.
95+
- 내적의 결과는 스칼라이다.
96+
- 교환/분배가 성립한다.
97+
98+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/84627079-3c70-48cf-a6e6-5b4cb48a56b6)
99+
100+
cosangle구하는 법
101+
102+
내적은 벡터의 곱셉 하지만 값은 스칼라
103+
104+
내적의 값이 0이라면 두 벡터는 수직이다.
105+
106+
내적의 값이 양수라면 0도와 90도 사이에 있다. (1)
107+
즉, 두 벡터가 같은 방향을 가지고 있다.
108+
109+
내적의 값이 음수라면 90도와 180도 사이에 있다. (-1)
110+
즉, 두 벡터가 반대 방향을 가지고 있다.
111+
112+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/8c6078ca-b5a4-404b-9e7c-9d758215ac84)
113+
114+
총알의 진행 방향과, 현재 뱡향의 내적이 0 초과라면 데미지를 입는다. 즉 같은 방향을 가진다면 데미지를 입는다.
115+
116+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/9d7c04a2-add0-43f4-913d-59e687a57cda)
117+
118+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/6a98199e-3b99-443e-97dc-57c34cb3555d)
119+
120+
에너지 총량의 법칙 때문에 빛이 닿는 면적의 밝기는 코사인 세타이다.
121+
122+
45도는 약 0.7정도로 나옴(코사인 45도)
123+
124+
## 벡터의 외적
125+
126+
- 벡터의 외적은 두 벡터를 모두 수직으로 통과하는 벡터를 구하는 연산
127+
- 벡터곱 또는 교차연산으로 부르기도 한다.
128+
129+
$$ \vec{a} \times \vec{b} = |\vec{a}||\vec{b}|sin\theta $$
130+
$$ \vec{a} \times \vec{b} = (a_yb_z - a_zb_y, a_zb_x - a_xb_z, a_xb_y - a_yb_x) $$
131+
132+
- 성질
133+
- 두 벡터를 외적한 벡터의 크기는 두 벡터가 이루는 평행사변형의 넓이와 같다.
134+
- 외적의 결과는 벡터이다.
135+
136+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/7ffece0a-e493-42c6-b492-806e49d803bf)
137+
138+
frontDirection은 현재 면의 앞을 가리키는 벡터이다.
139+
140+
sinagngle은 두 벡터가 이루는 각도이다.
141+
142+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/e1a99eef-9fa2-49c0-8ffe-032f409fe256)
143+
144+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/3fd58e41-75c8-43f4-a92b-e4adb4fd818b)
145+
146+
![image](https://github.com/fkdl0048/CodeReview/assets/84510455/62ce505a-247d-4df2-829b-0980b04f8a47)

0 commit comments

Comments
 (0)