Ad Block 한번만 꺼주시면 안될까요..?
게임 개발/게임수학

단위 벡터로 만들기. 벡터 크기 1로 만들기. 벡터의 정규화 하는법.

UniCoti(유니코티) 2023. 1. 17.

제목으로 보이다시피, 이 글에서는 한 벡터를

단위 벡터(크기가 1인 벡터)로 만드는 과정을 설명하려 한다.

 

먼저 알아둬야 할 사전지식이 있는데,

공식을 담을 사진에서 쓸

기호이다. 그 기호는 || || 으로,

절댓값 기호가 두 개 뭉쳐있는 듯이

생겼는데, 벡터의 크기라는 뜻이다.

 

ex) || t || 벡터 t의 크기.


이제 본격적으로 알아보자.

v 라는 이름의 2차원 벡터를 하나 만들어준다.

이해를 위해 비교적 간단한 수인

1, 2으로 벡터를 구성하였다.

 

이제 벡터의 크기를 구해야 하는데,

가상의 직각 삼각형을 만들어서

빗변의 길이를 확인해 주면 된다.

(순서쌍으로 생각하면 x = 1, y = 2)

이러한 직각 삼각형이 있다고 하면,

빗변(AC)은 얼마일까? 그렇다.

피타고라스 정리를 이용하면

 

이기 때문에, 1과 2를 대입해 주면,

전개하면,

넘기고 더해주면,

이렇게 된다.

그렇기 때문에 C는 루트 5가 된다.

이게 방향을(1, 2)로 갖는 벡터의 크기(힘)이다.

앞에서 설명한 벡터의 크기 기호를 사용하면,

이렇게 나타낼 수 있게 된다.


그럼 이 값으로, 벡터의 x, y를 하나씩 나눠주면 된다.

x는 1, y는 2이기 때문에,

정규화된 벡터는 이렇게 나타내진다.

루트 5가 2.23606797749..이라는 걸 고려할 때,

계산기로 이걸 계산해 보면,

이 정도로 나오게 된다.

이러면 정규화가 완료된 것이다.


크기가 1인걸 보여주기 위해 역으로 계산해 보겠다.(검산)

정규화된 벡터의 x값을 제곱,

y값도 제곱해 준다.

x제곱
y제곱.

x제곱과 y제곱을 더해보면,

이렇게 나오게 된다.

루트 5의 근삿값을 사용한 것과,

컴퓨터가 소수를 처리할 때

표현할 수 있는 범위가 정해져 있다는 등의

이유로 1과는 아주 살짝 다르게 나오지만,

 

1과 근사하며, 단위벡터가 된 것을 볼 수 있다.

지금까지의 과정을 한 그림으로 나타내 보자면 이렇다.

과정

여기까지 벡터의 정규화에 대해서 알아보았다.

나(필자)의 블로그가 게임 개발에 중점을 둔 만큼,

벡터의 정규화는 게임개발에 정말 많이 나오고,

사실 프로그래밍 할 때는 VectorN.normalized라는 메서드로

간편히 할 수 있지만, 그 원리가 궁금해져 찾아보고, 적어보았다.

 

https://alpaca-code.tistory.com/109(VertorN.normalized 예시)

 

벡터의 정규화(속도 같게 하기) 팁

위치를 이동시키는 코드를 짜 본 사람이라면 누구나 공감할만한 주제가 하나 있다. 그것은 바로 대각선으로 이동할 때 빠르게 간다는 것이다. 상하좌우로 움직이는 코드를 만들었다면, 상 또는

alpaca-code.tistory.com


도움이 되었길 바라며,

 

끝.

댓글

💲 추천 글