본문 바로가기

Game Math/Vector

게임수학] Vector (1) 이론

 벡터 (Vector)

- 벡터를 사용해서 정적인 위치가 아닌 동적인 모습을 기술할 수 있습니다.

- 벡터는 크기와 방향성을 가진 것으로 단순히 '크기'만을 가진 스칼라와는 대조됩니다.


스칼라 (Scalar)

- 흔히 생각할 수 있는 일반적인 수입니다.

- 2km 라는 단순한 값이 있을 때 이 값은 어디에서 어느 방향으로 2km인지에 대한 정보는 가지고 있지 않습니다.



변위 (Displacement)

- 마지막 위치 - 시작위치의 값.

* 아무리 많이 움직였다고 하더라도 마지막 위치 - 시작 위치이기 때문에 실제로 이동한 거리보다는 짧을 수 있습니다.

* 부호가 있습니다. ( 방향 판별 )



좌표계에 대한 설명




벡터 기본 연산


- 다음과 같은 A 와 B 벡터가 있다고 가정합니다.



벡터의 합


- A + B 의 벡터를 더하는 경우 둘 중 하나의 시작점이 나머지 하나의 끝점과 일치하도록 해주면 됩니다.

- A + B = C 를 나타내면 다음과 같습니다. ( 임의의 벡터 B 를 움직여 보겠습니다. )


- A [a,b] B [c,d] 라 가정했을 때 벡터 C 는 다음과 같이 구할 수 있습니다.


A + B = C 일때 벡터 C [ a + c , b + d ]


* 3차원 벡터 또한 동일하게 연산됩니다. A [ a , b, c ] 이고 B [ d , e , f ] 일때 

A + B = C 의 C  [ a + d , b + e, c + f ] 


* 벡터의 합 연산은 교환법칙이 성립하고 따라서 A+B 와 B+A 의 값은 동일합니다.



벡터의 차


- A - B 의 벡터의 경우엔 벡터의 합과 같이 둘 중 하나의 시작점이 나머지 하나의 끝점과 일치하도록 해주면 되는건 동일하지만, - 가 붙은 벡터 B 를 반전 시켜줘야 합니다. ( 각 성분의 부호를 바꾸어주면 됩니다. )

- 다음과 같이 나타낼 수 있습니다.

- A [a,b] B [c,d] 라 가정했을 때 벡터 C 는 다음과 같이 구할 수 있습니다.


A - B = C 일때 벡터 C [ a - c , b - d ]


* 마찬가지로 3차원 벡터 또한 동일하게 연산됩니다.  A [ a , b, c ] 이고 B [ d , e , f ] 일때 

A - B = C 의 C  [ a - d , b - e, c - f ]



벡터와 스칼라 곱


- 벡터 A 와 스칼라 값 c를 곱했을 때는 어떻게 될까요?

- 간단합니다. 스칼라 값 c 에 따라서 벡터 A 의 크기가 커지거나 작아지거나 그대로이거나 할 수 있습니다.


* 벡터 A 와 스칼라 2 를 곱하면 다음과 같이 나타낼 수 있습니다.

 2A = A * 2



* 벡터 A [ a, b ]라 가정했을 때 스칼라 값 c 와의 결과는 다음과 같이 구할 수 있습니다.

cA = [ a * c , b * c ]

* 3차원 벡터 또한 동일합니다. A [ a , b , c ] 일때 스칼라 값 d 와의 결과

dA = [ a * d , b * d , c * d ]



벡터의 크기(길이) ( Vector Length )


- 벡터 A [ x , y , z ]의 길이는 다음과 같이 구할 수 있습니다.




벡터의 정규화 ( Vector Normalization )


- 벡터의 정규화란 벡터의 크기를 1로 만들어 주는 것입니다. ( 크기가 1인 벡터를 단위 벡터 Unit Vector 라고 합니다. )

- 따라서 A 의 벡터를 정규화한다는 것은 벡터 A 의 크기로 각 성분들을 나누어 주는 것입니다.

[ x / |A| , y / |A| , z /|A| ] 


벡터의 내적 ( Vector Dot product )


- 두 벡터의 내적은 항상 스칼라 값이 나옵니다. 

- 벡터 A [ x , y , z ] B [ x2 , y2 , z2 ] 의 내적의 값은 다음과 같이 구할 수 있습니다.

- 각 성분끼리 곱하고 더한 결과를 취합니다. 

* 따라서 같은 차원의 벡터만을 내적할 수 있습니다.


 = 0 이면  ( A 와 B 는 직교한다. )

 < 0 ( 즉 음수이면 )  >

 > 0 ( 즉 양수이면 )  <

두 벡터 사이의 각 또한 알아낼 수 있습니다.


벡터의 외적 ( Vector Cross product )


- 두 벡터를 곱하는데 결과로 벡터를 획득합니다.

- 벡터 A [ x , y , z ] B [ x2, y2 ,z2 ] 의 외적 벡터 C 는 다음과 같이 구할 수 있습니다.

A x B = [ (y * z2 - z * y2 ) , (z * x2 - x * z2) , ( x * y2 - y * x2 ) ]


* 결과로 얻어지는 벡터 C 는 A 와 B 벡터의 수직인 직교 벡터입니다.

* 외적은 교환법칙이 성립되지 않습니다. A X B != B X A, 단. A X B = - ( B X A )

주로 외적은 법선 벡터를 획득해 라이팅에 활용됩니다.