프로그래밍/수학

프로그래밍을 위한 수학 - 벡터 기초

Lou Park 2022. 8. 28. 20:47

벡터

벡터는 “크기 방향을 모두 가지는 어떤 양”으로 정의된다.

각 프레임마다 객체는 특정 수 픽셀만큼 가로 및 세로로 움직이도록 프로그래밍하게된다.

객체의 새로운 위치는 현 위치에 속도를 적용한 값이 된다.  위 그림을 코드로 옮기면 아래와 같다.

// location = (this.x, this.y)
this.x += this.vx // horizontal steps
this.y += this.vy // vertical steps
// new_location = (this.x, this.y)

벡터의 덧셈

두 벡터 u = (5, 2), v = (3, 4)가 있다고하면 u + v = (8, 6)이다.

두 벡터를 더한다는 것은 단순히 벡터의 성분 x와 y 값을 더하는 것이다. 코드상에서 중력을 표현할때도 y좌표에 중력 값만큼을 더 해주게 된다. 

벡터의 뺄셈

두 벡터 u = (5,2), v= (3,4)가 있을때 u - v = (2, -2)이다. 빼다보면 (0, 0)인 영벡터가 나올것인데, 영벡터는 크기도, 방향도 없는 벡터이다. 또, u = (5, 2)와 크기는 같지만 방향이 정 반대인 벡터를 역벡터라고 한다. 

 

어떠한 좌표가 있을때 해당 좌표까지 이동해야한다고하면, 두 좌표를 뺀만큼이 이동해야할 거리가 된다. 

 

 

벡터의 곱셈

벡터의 곱은 벡터에 또다른 벡터를 곱하는 것이 아니라, 스칼라를 곱해주어야한다. 스칼라 = 실수(real number)다. 즉, 벡터의 크기를 배로 늘리거나 줄이려면 각 성분 x, y에 스칼라를 곱해야한다. u = (-3, 7)를 3배로 늘리면 (-9, 21)이 된다.

 

벡터의 크기

벡터의 길이 (크기)를 계산하기 위해서는 피타고라스 정리를 이용하면 된다. 벡터의 크기를 계산하는 것은 단위벡터를 만드는 데 이용될 수 있다. 다른 것들과 비교하기 위해 표준화 시킨 벡터들의 크기를 1이라고 하는데, 어떤 벡터를 이에 맞춰 정규화 시키려면 벡터의 방향은 그대로 두고 크기만 1로 바꾸어 주면 된다. 이렇게 크기가 1인 벡터를 단위벡터라고 한다.

 

단위벡터

단위벡터는 크기와 상관없이 방향만을 정의한다. 앞서 벡터는 크기와 방향을 정의한다고 했는데, 단위벡터는 그렇지 않다.

단위벡터 = (벡터 / 벡터의 길이)가 된다. 모든 성분을 벡터의 크기로 나누어주면 만들 수 있다.

마인크래프트 좀비가 플레이어를 따라올때 플레이어가 뒤로갔다고 해서 문워크하는게 아니라 고개를 돌려 항상 정면으로 마주치면서 따라오는 것을 볼 수 있는데...플레이어의 위치 벡터와 좀비의 위치 벡터를 뺀 값의 단위벡터가 좀비가 플레이어를 바라보는 방향이 된다 .

 

 

*출처: https://ko.khanacademy.org/computing/computer-programming/programming-natural-simulations#programming-vectors