[이득우 게임수학] 3. 벡터 : 가상 공간의 탄생
- 📕 Book/이득우 게임수학
- 2022. 12. 22.
벡터(Vector)란 평면에서 시각적으로 의미 있는 물체를 생성하기 위해 평면을 구성하는 원소이다.
3.1 데카르트 좌표계
데카르트 좌표계(Cartesian coordinate syste)는 직선의 수 집합을 수직으로 배치하여 평면을 표기하는 방식을 의미한다. 곱집합의 원어가 데카르트 곱(Cartesian pruduct)임을 생각해본다면 동일한 개념이라 볼 수 있다.
가로축을 x축 세로축을 y축으로 하여 평면을 가르면 총 4개의 분면으로 나뉘는데 오른쪽 상단에서부터 반시계방향으로 순서를 붙인다. 데카르트 좌표계의 한 원소는 곱집합과 동일하게 순서쌍으로 표현하며 좌표(Coordinate)라고 부른다.
(x,y)
3.2 벡터 공간과 벡터
스칼라와 벡터
두 개 이상의 실수를 곱집합으로 묶어 형성된 집합을 벡터 공간(Vector space)이라고 하며, 벡터 공간의 원소를 벡터(Vector)라고 한다. 좌푯값으로 사용하는 x와 y를 실수로 규정하기보다는 체의 구조를 지니는 집합, 즉 체 집합의 원소로 규정한다. 이렇게 체의 구조를 가지는 수 집합의 원소를 스칼라(Scalar)라고 부른다. 벡터 공간을 표기할 때에는 대문자 V를 사용하고 이의 원소인 벡터는 소문자 v로 표기한다.
벡터 공간의 연산
- 벡터와 벡터의 덧셈(벡터의 합)
v1 + v2 = (x1, y1) + (x2, y2) = (x1 + x2, y1 + y2)
- 스칼라와 벡터의 곱셈(스칼라 곱)
a · v = a · (x, y) = (a · x, a · y)
벡터 공간의 공리
- 벡터의 합
- 결합법칙 : u + (v + w) = (u + v) + w
- 교환법칙 : u + v = v + u
- 항등원 : v + 0 = v
- 역원 : v + (-v) = 0
- 스칼라 곱셈
- 호환성 : a(bv) = (ab)v
- 항등원 : 1 · v = v
- 벡터의 합에 대한 분배법칙 : a(u + v) = au + av
- 스칼라 덧셈에 대한 분배법칙 : (a + b)v = av + bv
벡터의 합과 스칼라 곱셈 연산을 구현한 코드
float scalar = 10.0f;
Vector2 vec1(2.0f, 3.0f);
Vector2 vec2(4.0f, 5.0f);
Vector2 addition = vec1 + vec2; //(6,8)
Vector2 multiplication = vec1 * scalar; //(20,30)
벡터의 크기와 이동
수의 크기는 절댓값 기호(||)를 사용해 구할 수 있다. 피타고라스 정리를 사용해 거리를 측정한다
c^2 = a^2 + b^2
c = sqrt((a*a) + (b*b))
임의의 벡터 v를 크기가 1인 단위벡터(Unit Vector)로 다듬는 작업을 정규화한다(Normalize)고 부른다.
백터의 결합과 생성
벡터 공간의 벡터의 합과 스칼라 곱셈 연산은 선형성이 있어 선형 연산이라고도 한다. 선형 연산을 사용해 n개의 스칼라와 n개의 벡터를 결합해 새로운 벡터 v' 를 생성하는 수식을 선형 결합(Linear combination)이라고 한다. 벡터를 곱하는 모든 스칼라 값이 0이면 선형 결합의 결과는 항상 영벡터(Zero Vector)가 된다. 그런데 0이 아닌 경우에도 영벡터는 나올수 있다. 그러한 경우를 '선형 종속의 관계'를 가진다고 표현한다. 반면에 영벡터가 나오기 위해 모든 a값이 0 이어야 한다면 사용된 벡터들은 서로 '선형 독립의 관계'를 가진다고 표현한다. 벡터 공간 내 모든 백터를 생성할 수 있는 선형 독립 관계를 가지는 벡터의 집합을 기저(Basis)라고 한다. 집합의 개념인 기저에 속한 원소를 기저벡터(Basis vector)라고 한다. 한 축만 사용하는 단위 벡터 (1,0) , (0,1) 로 구성된 집합을 표준기저(Standard basis)라고 하며 기저의 각 원소를 표준기저벡터(Standard basis vector)라고 한다.
실습
3-1 실습
https://github.com/onlybooks/gamemath/tree/3-1
위 깃허브 주소에서 파일을 다운 받고 프로젝트를 생성하여 예제를 실행하였다. 그리고 책에적힌 코드를 따라 입력하였고 실행하였다.
3-2 실습
정리
- 벡터 공간과 벡터에 대한 내용
- 벡터의 합과 스칼라 곱셈의 두 연산을 사용하여 벡터를 이동
- 선형결합, 선형 독립, 기저, 기저벡터, 차원 용어의 정의와 개념
후기
실습 코드가 euc-kr로 인코딩된 파일이다. 비주얼 스튜디오의 기본 인코딩을 euc-kr로 변경해보고자 했지만 방법을 찾을 수 없었다. 일일이 UTF-8로 변경해서 주석을 확인하였다. 힘들었다. 모든 예제코드가 이럴텐데 무언가 방법이 필요하다.
출처
- 이득우의 게임수학 (https://www.onlybook.co.kr/entry/gamemath)