[수학][Unity] 외적

Yoo Hyung Joo ·2023년 10월 25일
1

외적

외적을 사용하는 이유

게임 수학에서는 외적도 자주 쓰인다 내적에 비해 활용도는 크게 높지 않지만 특정 상황에서 항상 쓰이기 때문에 알고 있어야한다. 이 특정상황은 플레이어 기준으로 왼쪽 오른쪽 등 바라보는 벡터를 기준으로 어느 방향에 있는지 알 수가 있다. 이러한 특징은 내적과 함께 더불어 사용하여 3D 게임을 만들 때 회전각을 이용해서 사용하기도 한다.

외적의 정의
외적도 정의적으로는 두 벡터의 곱이다. 외적의 결과값은 내적과 다르게 스칼라가 아닌 벡터 값이며, 두 벡터의 수직이다. 크기는 두 벡터가 이루는 정사각형의 넓이이다.

아래는 외적의 예시 그림이다.

아래는 외적의 계산 공식이다.

그래서 왜 방향을 찾는데 외적을 사용하는가?
3차원 공간에서 외적은 오른손 법칙을 만족한다. 여기서 오른손 법칙이란 외적하는 두 벡터를 오른손으로 감쌌을 때 엄지 방향이 외적 벡터의 방향이라는 것인데..

대충 그림을 보면 이렇다. 우리는 이 오른손 법칙을 이용해 한 벡터를 기준으로 왼쪽에 있는지 오른쪽에 있는지 확인할 수 가 있는 것이다. 한 벡터를 기준으로 다른 벡터를 오른손으로 감았을 때 엄지의 방향이 3차원 기준으로 음수냐 양수냐에 따라 나머지 한 벡터가 어느 방향에 있는지 알 수 있다. 하지만 이는 엔진마다 3차원 z축의 방향이 다를 수 있으므로 이를 고려하여 계산을 해야한다.

ex)

// 외적을 통해 각도의 방향을 판별.
Vector3 cross = Vector3.Cross(transform.up, target);
// 외적 결과 값에 따라 각도 반영
if (cross.z < 0)
{
	angle = transform.rotation.eulerAngles.z - Mathf.Min(10, angle);
}
else
{
	angle = transform.rotation.eulerAngles.z + Mathf.Min(10, angle);
}

이러한 예시코드를 통해 벡터의 방향 즉 z 좌표가 음수인지 양수인지를 통해 왼쪽 오른쪽 어느 방향에 해당 벡터가 이있는지 구해낼 수 있다.

느낀점

내적을 활용한 코드는 특히나 자주 사용되는 것 같다. 내적도 깊게 들어가면 복잡하지만 게임 수학에서는 방향 구하는 것 말고는 딱히 쓰일 곳은 잘 보이지는 않는다. 내적과 외적을 활용해 게임 내에서 제작을 할 때 좀 더 퀄리티 있는 코드를 만들어 낼 수 있을 것 같다.

profile
성장을 멈추지 않는 개발자

0개의 댓글