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

벡터의 외적. (정의, 크기 계산법, 계산 방법, 방향 결정법, 활용법)

UniCoti(유니코티) 2023. 11. 3.

이번 글에서는 벡터의 외적에 대하여 글을 남기겠다.
벡터의 외적은 기본적으로 벡터의 곱셈이다.
벡터의 곱셈에는 두 종류가 있으며, 내적과 외적이 대상이다.

 

https://alpaca-code.tistory.com/224 (벡터의 내적 글 추가!)

 

벡터의 곱셉 - 벡터의 내적. (정의, 계산법, 활용법)

우선, 벡터의 곱셉 중 한 종류인 벡터의 내적은 수학이라는 분야 안에 있는 기술 중 하나이지만, 게임 수학 쪽에 좀 더 연관이 있지 않을까 싶어 게임 수학에 대한 글로써 적을 예정이다. 첫 번째

alpaca-code.tistory.com

 

(외적은 기호로 이렇게 표현한다)


내적은 두 벡터를 가지고 연산했을 때 스칼라(실수)가 나오고, 외적은 연산했을 때 새로운 벡터값이 나오게 된다.
기초 지식은 이정도로 하고,  본격적으로 알아보자


1. 벡터의 외적의 정의.

벡터의 외적이란, 기본적으로 두 벡터에
모두 수직인 새 벡터를 만들어내는 연산이다.

두 벡터에 모두 수직이여야 하기 때문에
주로 3차원이라는 개념 안에서 성립한다.

3차원 좌표계

대표적인 예시를 들면, 3차원 좌표계에서
x축과 y축을 벡터의 외적 연산하면
z 축이 등장하게 되는 식이다.  (두 벡터에 모두 수직)



1-1. 벡터의 외적의 크기.

외적의 크기는 두 벡터가 만드는 평행사변형 넓이와 같다.


따라서 중학교 때 배웠던 삼각형 공식을 변형해 넓이를 구한다.

 

벡터의 외적 크기 공식

이건 삼각형 공식이고, 외적의 크기를 구하려면 평행사변형을 구해야 하기에

2를 곱해주고, a와 b는 선분의 길이를 의미하기에

선분의 길이를 벡터의 크기로 식을 바꿔주면 위와 같아진다.


1-2. 벡터의 원소를 알 때의 계산방법.

만약 당신이 벡터의 원소들을 모두 알고 있다면 바로 계산가능하다.

이걸 계산해 보면 벡터 a와 b 모두에게 수직인 새로운 벡터가 나올 것이다.


1-3. 외적의 방향

나는 앞서 외적을 "두 벡터에 모두 수직인 새로운 3차원 벡터"로 소개했다.

하지만 이렇게 정의하면 한 가지 모순이 생기는데, 방향이 2개라는 것이다.

예시로, 처음에 설명했던 x축과 y축을 벡터로 본 사례가 그것이다.

 

여기서 x축과 y축, z축을 벡터로 생각해 보자.

 

그럼 위의 식이 성립하게 된다.

하지만 z 축이 아래쪽으로 향하는 벡터도 성립해야 하는 것처럼 보인다.

사실 이것은 신기하게도 오른손의 법칙으로 방향이 결정된다.

 

x축에 4개의 손가락을 향하게 두자. 그 후 y축이 있는 방향으로 손을 감아보자.

그리고 엄지손가락을 세우면, 엄지손가락은 위쪽을 향하는 걸 볼 수 있다.

 

따라서, 이런 외적을 해야 한다면, 벡터 a가 가리키는 방향으로 손가락을 놓은 후,

b방향으로 손가락을 감고 나서 엄지손가락이 향하는 방향이 외적의 방향이다.

 

b x a가 되면 당연하게도 방향이 반대로 바뀌는 걸 볼 수 있다.

(이 부분에서 교환법칙이 성립하지 않음을 보인다)

 

영상 같은 것을 보면 쉽게 이해할 수 있을 거라 생각한다.

 

https://www.youtube.com/watch?app&v=9mis_WA-Sy4 (타 유튜버의 설명)


 

2. 게임에서의 외적 활용

게임개발 블로그이니만큼, 게임개발에서 외적을 활용할 곳을 소개하겠다.

크게 2가지로 나뉘며, 법선벡터와 위치 판별이 대표적이다.

2-1. 법선벡터로 이용

먼저, 법선 벡터를 형성할 수 있다. 법선 벡터란 간단히 말하면 어떠한

평면에 직교하는 벡터를 말한다.

 

벡터의 외적은 두 벡터에 수직인 벡터를 만드는데,

두 벡터를 평면으로 생각하면 법선벡터와 같기도 하다.

그렇기에 법선벡터로서 외적을 사용하기도 한다.

 

https://alpaca-code.tistory.com/193 (법선벡터를 활용한 주고받기)

 

유니티) OnCollisionExit에서 접점을 구하는 방법.

일반적으로, 닿은 물체에 대한 Collision을 가지고 있다면 접점은 그냥 메서드를 통해서 한 번에 구해줄 수 있다. point = other.GetContact(0); 하지만 문제점은, OnCollisionStay나 Enter는 닿아 있는 상태이기

alpaca-code.tistory.com


2-2. 물체의 위치 판별 (본인 시야 기준)

벡터의 외적 연산을 수행하면 오른손 법칙에 따라서 2개가 나오기에

이걸 이용해서 본인의 시야 벡터 하나물체로 가는 벡터 하나로, 총 2개를 구성해서

(시야벡터 x 물체로 가는 벡터)를 연산한 결과가 위쪽으로 향하면

오른손이 감긴 것이니 왼쪽에 있다고 판별할 수 있다.

 

반대 또한 성립한다. 결과가 아래쪽을 향하면 물체가 오른쪽에 있는 것이다.

 

y축이 본인의 시야벡터라고 하고,

두 물체로 가는 벡터가 있다고 생각해 보자.

 

그럼 y축에 손가락을 향하게 해 놓고, 각 물체 쪽으로 가도록

손가락을 감아보자. 왼쪽에 있는 물체는 엄지가 위쪽으로,

오른쪽 물체는 엄지가 아래쪽으로 향할 것이다.

 

이 특성을 이용하여 물체가 자신으로부터 어느 쪽에 있는지 판별할 수 있다.


여기까지 벡터의 외적의 의미, 크기계산법,

연산법, 방향결정법과 활용법까지 알아보았다.

 

생각보다도 더욱 유용한 연산과정이 아닌가 싶을 정도로 

알아볼 것이 많았던 편이 아닐까 싶다. 

이렇게 공부하긴 했지만 현실적으로 내가 이걸

떠올려서 게임개발에 적용할 수 있을지는 모르겠다.


이상으로 도움이 되었길 바라며,

 

끝.

댓글

💲 추천 글