1장 벡터 대수

Posted by 쏘엔
2019. 3. 13. 03:30 DirectX 12/기초 수학


이 포스팅의 내용은 DirectX 12를 이용한 3D 게임 프로그래밍 입문 (프랭크 D. 루나 저) 책과 인터넷을 참고하여 간단히 정리하였다.


  • 벡터의 정의

'벡터(vector)'는 크기방향을 모두 가진 수량을 가리키는 말이다.

벡터의 예로는 힘(force)이 있다. 힘은 특정한 방향과 세기로 가해지기 때문이다. 

개미가 북쪽으로 10미터 나아가는 것도 벡터라고 할 수 있다. 크기는 10미터이고 방향은 북쪽이 된다.

벡터는 위 그림과 같이 표현할 수 있다.

선분의 길이는 벡터의 크기를 나타내고, 화살표는 방향을 나타낸다.

화살표가 있는 방향을 '머리'라 하고, 화살표가 없는 반대편을 '꼬리'라고 한다.


벡터의 중요한 성질은, 위치무관하다는 것이다.

그러니까 크기와 방향이 같다면 그 위치가 달라도 두 벡터는 동일하다.


  • 왼손잡이 좌표계와 오른손잡이 좌표계

(이미지 출처 : http://www.learnopengles.com/understanding-opengls-matrices/left_right_hand/)

2D 그래픽을 표현할 때에는 그냥 2차원 좌표계(x와 y만 존재하는)를 사용하면 되지만, 3D 그래픽을 표현할 때에는 z축의 방향에 따라 좌표계가 달라진다. 
위 그림을 보면 이해가 쉬운데, 두 좌표계 모두 x축과 y축의 방향은 동일하지만, z축(가운뎃 손가락)의 방향이 다른 것을 알 수 있다. 가운뎃 손가락이 가리키는 방향이 z축이 양수(+)가 되는 방향이다. 
3차원 공간에 벡터를 표현하려면 3개의 점을 이용한다.    ex)    
프로그램 내에서는 벡터를 3개의 실수값(float이나 double)을 이용해서 표현한다.
같은 벡터라도 좌표계에 따라 표현이 달라질 수 있음에 주의해야 한다. 참고로 Direct3D는 왼손 좌표계이다.


  • 기본적인 벡터 연산들

두 벡터가 있다.

1. 두 벡터가 동일하려면 각 좌표의 성분이 모두 같아야만 동일하다.
ex)

일때에만  이다.


2. 벡터의 덧셈은 각 성분별로 이루어진다.
ex)



3. 벡터에 스칼라(scalar, 크기만 있는 것)를 곱할 수 있으며 벡터에 스칼라를 곱하면 결과는 벡터이다.
ex) 스칼라 K를 벡터 V에 곱하면 


4. 벡터의 뺄셈은 벡터 덧셈과 스칼라 곱셈을 통해서 정의된다.
ex)

참고로 벡터에 부호를 바꾸면 방향이 완전 반대가 된다.    벡터에 스칼라를 곱셈하면 벡터의 크기(길이)가 늘어난다.



  • 벡터의 크기

    <- 벡터의 크기는 수식으로 이렇게 표현한다. 벡터의 크기는 피타고라스의 정리를 2번 이용하면 나오는 데 어려운 이야기는 건너뛰고 벡터 크기의 공식은 아래와 같다.



  • 단위 벡터(unit vector)

벡터의 크기는 중요하지 않고, 방향만 필요할 때가 있다. 그럴 때 단위 벡터를 사용하고, 어떤 벡터를 단위 벡터로 만드는 것을 정규화(normalization)이라고 부른다. 벡터의 각 성분을 벡터의 크기로 나누면 벡터가 정규화된다.



  • 벡터의 내적(dot product)
점곱이라고도 부른다.
두 벡터를 곱하는 벡터 곱셈이다. 주의할 점은, 결과값이 스칼라로 나온다는 것이다.

내적의 정의만 봐서는 내적의 기하학적 의미가 분명하지 않은데, 코사인 법칙을 적용해보면 다음과 같은 관계를 찾아낼 수 있다.

여기서 θ는 벡터 u와 v사이의 0보다 크거나 같고 파이보다 작거나 같은 값을 만족하는 각도 값이다.



  • 벡터의 외적(cross product)

또 다른 벡터의 곱셈으로는 외적이 있다.

내적은 결과가 스칼라가 나왔지만 외적은 벡터가 나온다. 또한 외적은 3차원 벡터에 대해서만 적용된다.(2차원 벡터는 외적이라는 개념이 없다)    그리고 외적은 교환법칙이 성립되지 않는다.

외적을 이용하면 두 벡터의 직교인 벡터가 나온다.

    두 벡터가 있을 때 이 둘을 외적한 벡터 w는 아래와 같이 구할 수 있다.

외적한 벡터 w는 벡터 u와 벡터 v에 대해서 직교인 벡터이다.

왼손을 펼쳐서 첫 벡터 u의 방향을 가리킨 상태에서 둘째 벡터 v의 방향(첫 벡터와의 각도가 90도 이하가 되는 쪽)으로 말아쥐었을 때 엄치 손가락이 가리키는 방향이 바로 w(직교 벡터) = u x v의 방향이다. 이를 왼손 엄지 법칙(left-hand-thumb rule)이라 부른다. 위 그림을 보고 직접 한번 해보면 이해가 빠르게 될 것이다.



  • 위치 벡터(점)

지금까지 살펴본 벡터는 위치를 사용하지 않는다. 하지만 3차원 그래픽 프로그램에서는 공간 안의 어떤 위치를 지정할 수 있어야 한다. 특정 좌표계를 기준으로 표준 위치에 있는(꼬리가 원점과 일치하도록 이동된 벡터) 벡터를 3차원 공간 안의 한 위치를 나타내는데 사용하는 벡터를 위치벡터라고 부른다.

위치벡터에서 중요한 것은 벡터의 머리 끝 좌표이다.  그러므로 다른 말로는 이라고 부른다.
위치벡터에서 의미 있게 적용할 수 있는 연산들이 있다. 예를 들어, 두 점(두 위치벡터)의 차 q - p를 p에서 q로 가는 벡터라고 정의할 수 있다.
또, 점 p(위치벡터) 더하기 벡터 v를 p의 위치를 v만큼 옮겼을 때 도달하는 점이라고도 정의할 수 있다.
이 연산들은 벡터의 뺄셈과 덧셈으로 적용할 수 있으므로 기존의 벡터 대수 연산을 그대로 사용하면 된다.


'DirectX 12 > 기초 수학' 카테고리의 다른 글

3장 변환  (0) 2019.03.24
2장 행렬 대수  (0) 2019.03.13