Home 3. Vector
Post
Cancel

3. Vector

벡터의 연산

벡터와 스칼라의 곱이 가지는 시각적 성질을 벡터가 가지는 성질과 함께 정리

2주차 과제 중 일부 벡터는 화살표입니다. 어느 방향으로 얼마만큼 이라는 정보를 가진 화살표 입니다. 이 화살표에게 크기를 늘린다는것은, 진행하는 방향을 하나로 축으로 하는 직선에서의 크기입니다.

즉 벡터의 공간은 1차원 직선입니다.

벡터의 방향은 하나의 속성(프로퍼티)이며

또 하나, 크기의 값을 가집니다. 이 중 크기는 스칼라배를 통해 수정할 수 있으나 방향은 스칼라배(0을 제외한)를 통해 바꿀 수 없습니다.

이에 시각적으로 임의의 값을 가진 스칼라배를 한 벡터를 모은다면, 예쁜 선을 만들 수 있습니다.

노름(Norm): 크기

크기는 원점으로부터의 거리입니다.

이는 ‘수의 크기’나 ‘벡터의 크기’나 같은 얘기이며,

벡터에서는 원점에서부터의 최단거리 $$ v = \sqrt {x^2+y^2}$$ 를

노름(Norm) 이라고합니다.

게임엔진에서?

게임엔진을 다루다 보면 크기를 구하기 위해 사용하는

vector.magnitude가 이에 해당합니다.

다만 square root연산(sqrt\sqrt {sqrt})은 비싸기 때문에

두 벡터의 크기만을 비교할 땐 sqrMagnitude 같은 square root연산이 들어가지 않은 값을 사용하기도 합니다.

1
2
3
//원안에 점이 있는지 검사
bool ComputePointPenetration(in Vector2 point, in float radius)
=> point.sqrMagnitude < radius * radius;
? 강의자료에서는 $$v$$로 나와있던데 절댓값과 노름은 같은 표기를 하는건가요?

단위벡터(Unit Vector): 노름이 1인 벡터

벡터의 크기의 역수를 곱하면 단위벡터가 만들어집니다

이 단위벡터를 ‘햇’이라 부르고 v^\hat v 로 표기합니다.

따라서 공식은 다음과 같이 표기합니다.

v^=vv\hat v = \frac v {||v||}

단위벡터를 사용하게 된다면, 새로운 벡터를 만드는데 있어 편해집니다.

예를 들어 어떤 방향으로 어느정도 이동하고 싶을 때

크기를 가진 벡터라면 도착위치를 맞추기 위해 나눠야 할 경우가 있습니다.

이를 검사하고, 재조정할 바에는 규격을 딱 맞춰둔 방향정보를 주로 쓰게 될 벡터,

즉 단위벡터를 사용하는 것이 편리하다는 것이죠.

게임엔진에서?

실제 게임 구현시 자주보게되는

vector.normalized 혹은 vector.Normalize() 가

단위벡터를 반환하거나 단위벡터로 만드는 방법입니다.

주로 스칼라배와 함께 사용해서 임의의 벡터를 만드는데 얻죠.

예를 들어 총알의 발사속도는 대충 발사방향의 단위벡터에 속력이라는 스칼라값을 곱해 구합니다.

1
var bulletVelocity = GetMuzzleDirection().normalized * speed

벡터의 생성(Span)

벡터를 통해 알 수 있는 정보인 크기 및 방향은 하나의 속성(Property)이며 크기는 스칼라배를 통해 수정할 수 있으나 방향은 스칼라배(0을 제외한)를 통해 바꿀 수 없습니다.

선형조합

선형조합(Linear Combination)은 임의의 벡터들로 새로운 벡터를 만드는 것

예를 들어 스칼라배와 덧셈을 통해 새로운 벡터를 만들 수 있습니다.

주어진 nn개의 벡터집합으로 부터 임의의 스칼라 a1,a2,...,ana_1,a_2,...,a_n를 통해

다음과 같이 합 벡터로 표현하는 것입니다. a1v1+a2v2+...+anvna_1v_1 + a_2v_2 + ... + a_nv_n

선형의존

주어진 nn개의 벡터집합으로 부터 임의의 스칼라배를 한 후 합친 벡터가 0벡터 라면 같은 속성 : 방향을 가졌다고 볼 수 있기 때문에 해당 벡터들은 선형의존(Linear Dependent)이라고 합니다.

nn개의 벡터에 대해 a1v1+a2v2+...+anvn=0a_1 v_1 + a_2 v_2 + ... + a_n v_n = \vec {0} (0벡터) 일 때 a1,a2,...,ana_1, a_2, ... , a_n 중 0이 아닌 aia_i (i : index, 임의의 값) 가 있다면 선형의존입니다.

선형독립

반대로 0이 아닌 스칼라배를 한 벡터들을 사용하여 0벡터를 만들 수 없다면 그 벡터들은 선형독립(Linear Independent)입니다.

nn개의 벡터에 대해 a1v1+a2v2+...+anvn=0a_1 v_1 + a_2 v_2 + ... + a_n v_n = \vec {0} 일 때a1,a2,...,ana_1, a_2, ... , a_n 이 모두 0이여야 한다면 선형독립입니다.

자, 선형조합을 통해 임의의 벡터를 만들 수 있습니다.

그렇다면 모든 벡터는 생성이 가능할까요?

기저와 기저벡터

임의의 벡터들이 선형의존관계가 아니라면 생성이 가능합니다

이 생성이 가능하게 만드는 벡터들을 기저벡터(basis vector) 라고 합니다.

그리고 이 선형독립인 벡터들의 집합을 기저(basis)라고 합니다.

표준기저벡터

그리고 표준기저벡터(Standard Basis Vector) 라는 존재가 있습니다.

아까 위에서 설명하였던 단위벡터의 기저벡터 버전이라고 보시면 됩니다.

계산을 편리하게 만들고, 가장 개념적으로 타이트하기 쉬운 벡터이며,

성분 1개만이 1이며 나머지 성분이 모두 0인 벡터입니다.

예를 들어 데카르트 좌표계에서는 e1=(1,0)e2=(0,1)e_1 = (1,0)\quad e_2 = (0,1)의 두 개의 벡터가 표준 기저벡터입니다.

이 표준 기저 벡터를 통해 좌표에 존재하는 모든 지점을 각각의 성분에 스칼라배를 한 값으로 나타낼 수 있습니다.

차원

차원(Dimension)은 방금 설명한 기저집합이 가지는 원소의 수다.

2차원이라면 2개의 기저벡터, 3차원이라면 3개의 기저벡터를 사용하는 것이죠.

예를 들어 3차원에서 x,y,z의 좌표 성분수에 따라 3차원을 구성한다면,

벡터공간에서는 기저벡터의 수를 가지고 n차원을 구성하는 것입니다.

차원을 사용한 벡터공간의 표기법

차원을 n이라 할때,

Rn\mathbb R^n ⇒ 실수 집합에서의 n차원 공간

FnF^n ⇒ 체집합F에서의 n차원 공간

n차원 벡터 ⇒ n-순서쌍 으로 표현합니다.

구현과제

https://ashuatz.github.ioGIF.gif

https://gist.github.com/ashuatz/a0e4534e98b465ce0c8ed77d03910794

gist 오류시 : https://gist.github.com/ashuatz/a0e4534e98b465ce0c8ed77d03910794

심화주제

2차원 평면에서 기저벡터는 왜 3개가 존재할 수 없는가.

기저벡터를 다시 짚고 넘어갑시다.

기저는 선형독립인 벡터들의 집합이며, 기저벡터는 기저의 원소입니다.

즉, 선형 독립들인 벡터들을 생각해야합니다.

두 개의 벡터에 대해 이미 선형독립이라면, 이 두 벡터를 포함한 3개 이상의 벡터는 선형독립이 될 수 없습니다.

왜냐하면 두 개의 기저벡터로 이미 2차원 평면에 포함되는 어떠한 벡터를 만들 수 있기 때문에 어떠한 벡터라도 벡터덧셈의 역원을 만들어서 0\vec {0}(0벡터)를 만들 수 있기 때문입니다.

따라서 2차원 평면에서 기저벡터는 3개가 존재할 수 없다.

세 개의 벡터가 선형독립이 되려면 차원이 3차원이 되어야 합니다. 이를 일반화 한다면 N개의 벡터가 선형독립이 되려면 N차원이 필요합니다.


이번주차는 최대한 깔끔하게 이해한 것을 정리해 보았습니다.

이번 개념은 배우면서 상당히 깔끔하게 논리적으로 전개되고, 이해가 되어 만족스럽습니다.

추가적으로 1학년때 개념을 이해하기 위해 보았던 영상중에 시각적으로 잘 표현한 영상이 있어, 다음과 같이 첨부합니다.

http://youtu.be/k7RM-ot2NWY?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab

This post is licensed under CC BY 4.0 by the author.
Contents