게임엔진/윈도우API

윈도우API)9. 벡터의 내적

PJNull 2022. 12. 22. 09:41
728x90
반응형

벡터의 내적

 

벡터에서 내적은 공식하나로 간단하게 구해질수 있다. 하지만 내적에서 중요한것은 게임엔진에서 어떤 식으로 응용이되는지가 중요하다. 이번 포스팅에서는 그것을 중점적으로 알아보고자 한다.

 

 

게임수학) Chapter2. 벡터

스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치

pjnull.tistory.com


내적의 활용

 

내적은 어떤 상황에서 유용하게 응용될수 있을까? 5가지의 예시를 통해 알아보자

 

1.내적의 값==0일경우

내적의 값이 0일경우 cos의 각도가 90º라는것을 의미한다.

 

2.내적의 값>0일 경우

내적의 값이 0보다 클 경우 cos의 각도가 예각라는것을 의미한다.

 

3.내적의 값<0일 경우

내적의 값이 0보다 클 경우 cos의 각도가 둔각라는것을 의미한다.

 

4.각 벡터가 모두 단위벡터 라면?

각 벡터가 모두 단위벡터일 경우 내적의 값은 cos의 값이 된다. 즉, cos값을 구하고 싶을때 두 벡터를 단위벡터로 하고 내적을 하면 원하는 값을 얻을수 있다는 뜻이다.

 

5.한 벡터를 알고 있을 때 다른 벡터를 구하려면?

빗변의 벡터에 대해 알고 있을 때 밑변의 벡터에 대한 정보를 알고 싶을때 내적을 사용하면 굉장히 유용하다.

밑변은 cos=빗변/밑변의 공식에 의해서 아래와 같은 값을 가지게 되는데 여기서 밑변의 벡터를 단위벡터로 정규화하고 내적을 하면 밑변의 스칼라값이 구해지게된다. 그것을 정규화한 단위벡터와 곱하면 밑변의 방향벡터를 손쉽게 구할수 있게 된다.

 

 

 

마우스를 따라다니는 몬스터

 

위에서 언급한 5번 예시를 적용하면 다음과 같이 구현이 가능하다.

 

그림과 같이 빨간색 화살표의 좌표를 얻어 Monster를 이동시키면 되는데, 벡터 v2는 이미 알고 있기때문에 벡터 v1를 정규화시키고, 내적을 이용하여 목표지점의 스칼라값을 구한다음, 단위벡터v1을 곱해주면 원하는 값이 나오게 된다.

 

//Monster.cpp


void Monster::Update()
{
	Vector mousepos=GET_SINGLE(InputManager)->GetMousePos();
	Vector v1 = _end - _start;
	Vector v2 = mousepos - _start;
	v1.Normalize();
	float dot = v1.Dot(v2);
	Vector pos = _start + v1 * dot;
	_pos = pos;

}

 

하지만 이같은 경우 범위를 벗어 나더라도 몬스터가 이동이 가능하다.

이부분은 위에서 예시로 든 2번,3번을 이용한다면

범위내에서만 움직이도록 구현할수 있다.

 

//Monster.cpp

void Monster::Update()
{
	float max=v1.Length();
	if(dot>max||dot<0)return;
}

728x90
반응형