내적(dot product)는 두 벡터 사이의 곱 연산이다.
A⋅B = |A| |B| cosθ
이를 다시 삼각형을 제대로 그려서 한 번 보겠다.
자, 삼각형을 그려서 보니 내적은 b와 b에 투영한 a의 길이의 곱이다.... 즉, 두 평행한 길이만 다른 것들끼리 곱을 하고 있다.
근데 이게 무엇? 무슨 의미?..인지 모르겟다.
a를 b에 투영했을 때 길이를 구하려는 것인가? 예를들어 가게에 어닝을 설치했는데, 설치할 때 어닝이 햇빛을 어디까지 막아주는 지 그 면적 혹은 길이를 알고 싶어서, 또는 그 비슷한 행위(투영 했을 때 뭘 알고 싶은)를 통해 알고 싶은 정보가 있어서 이 "내적"이라는 것을 사용하려는 것인가?
사실 고등학교 때 열심히 다 공부하고 알고 있지만 오랜만에 다시 공부하려니 다 까먹었다. 그래서 오랜만에 기억을 상기시켜 보는데 위에 처럼 처음 생각을 했다.
그리고 더 이상 생각이 나지 않아 구글을 뒤져보았다.
결론은 내적의 의미란 어닝을 투영했을 때 얼마나 햇빛을 막아주는지 그 길이를 구하려는 것이 아니라, a랑 b가 얼마나 각도 차이가 나는지 구하려는 것이였다!!!
이건 또 뭔 의미인가?
즉, 위의 삼각형에서 cosθ의 특성을 이용하여, 각도가 0도면 A⋅B의 값과 |A| |B| cosθ이 같고, 각도가 90도면 |A| |B| cosθ = 0이다.
즉, 내적을 통해 두 벡터의 방향이 얼마나 일치하는지를 알 수 있다. 이는 중요한 정보이고 여러 분야에서 내적을 활용하면 정말 유용할 수 있겠다는 생각이 들었다.
* 용도
물리에서는 내적은 효율로 본다고 한다.
예를 들어, 쇼파의 위치를 옮긴다고 했을 때, L의 방향으로 F만큼의 힘을 줘서 움직여야 쇼파를 옮겼다고 할 수 있다.
L의 방향으로 힘이 작용되어야 일에 관려, 일을 했다고 볼 수 있다.
수평적으로 동일하게 작용됬을 때, F가 100% 일로 소모됐다고 할 수 있다.
그냥 쇼파를 들었다 내려두면 그건 쇼파를 옮겼다고 할 수 없다.
그래서 수직적으로 작용했을 땐 일을 안했다고 할 수 있다.
내적은 목표하는 방향과 일치하는 성분이 얼마인지를 보는것이다. cos 연산이기 때문에 일치할수록 커진다(많으면 많을수록 커짐)
또한, 게임에서는 이렇게 사용할 수 있다.
주인공의 방향벡터가 있고, 적이 주인공의 앞에 있는지 뒤에 있는지?
나와 적의 거리 차이로 나오는 벡터 A와 나의 Forward 벡터 간에 내적을 했을 때 양수가 나오면 적이 앞에 있는 것이고, 음수가 나오면 적이 뒤에 있는 것이다.
적이 주인공의 시야각안에 들어와 있는지 아닌지 판별?
주인공의 시야각을 θ라하면, Forward 벡터와 적과 주인공의 거리 차이로 나오는 벡터 A간의 내적을 통해 나오는 각도 값이 θ/2를 넘지 않아야 시야 내에 존재한다는 것을 판별할 수 있다. 각도를 다 구하기 보다는 cos값으로 판단해야 연산이 적다.
점 A와 평면 S간의 최단 거리는 아래와 같은 내적을 통해 구할 수 있다.

벡터 BA와 평면의 Normal 벡터(단위 벡터)와 내적을 구하면, ba*cosθ의 값이 된다. 이때, 거리값이 0이면 평면 위의 점이 된다.
적이 캐릭터의 오른쪽에 있는지 왼쪽에 있는지 판별할 때도 이용된다.

월드 좌표계의 Up방향 벡터를 Up, 캐릭터의 Forward 방향 벡터를 F, 캐릭터와 저간에 생기는 벡터를 A벡터라고 한다면, Up*(AxF)값, 즉 Det(Up,A,F)값이 0보다 크면 오른쪽, 0보다 작으면 캐릭터의 왼쪽에 있음으 판별할 수 있다.
벽에 부딪혀서 미끄러지는 캐릭터의 방향을 계산할 때도 이용할 수 있다.
그럼 이제 외적의 뭔지와 그 의미를 알아보자.
.. 외적은 뭔지 다 까먹었다. 바로 검색해 보자!
외적은 두 벡터의 수직인 벡터를 구하는 방법이란다. 기호로 x를 사용하고 A x B 로 표현한다. 일반적으로 외적 혹은 cross product라고 부른다. A x B 를 하면 두 벡터에 수직인 새로운 벡터 C가 나오기 때문에 수학적으로 표현하면 A x B = C 가 된다.
넘 어렵다.. 바로 게임개발 활용으로 들어가서 아라보자!
외적은 보통 좌, 우를 판별할 때 많이 사용된다. 아까 내적을 살펴봤을 때 눈치챈 사람도 있겠지만, 내적은 좌, 우를 구분하지 않는다. 왼쪽이든 오른쪽이든 같은 각도라면, 같은 값을 반환한다. 하지만 외적은 다르다. 외적은 우선 내적과 다르게 스칼라 값이 아닌 벡터 값이므로 방향성을 갖고, 인자의 순서가 반대일 경우, 같은 절대값의 반대부호를 가진 값을 반환하게 된다.
아까 언급했었던 대로 외적은 보통 오브젝트가 왼쪽에 있는지, 오른쪽에 있는지 판별하는데 사용된다.
플래이어의 시선과 Up 벡터를 중심으로 외적을 구한다면 플레이어의 왼쪽에있는 오브젝트는 양수,
플레이어의 오른쪽에 있는 오브젝트는 음수를 반환할 것이다.
물론 이 외에도 사용되는 곳이 많지만, 게임이라는 조건에서 보편적으로 사용될 수 있는 기법은 이정도 인 것 같다.
https://jeunna.tistory.com/158
벡터 내적과 외적의 물리적 의미
벡터 곱에는 두 가지가 있다 Dot (내적) ⋅ Cross (외적) × 둘 다 곱 연산인데 어떤 차이가 있을까? 내적 벡터의 내적은 효율이라고 볼 수 있다 예를 들어 쇼파의 위치를 옮긴다고 했을 때, L의 방향
jeunna.tistory.com
https://blog.naver.com/lavacat94/221514187661
- 벡터에서 내적, 외적의 의미와 용도
벡터의 내적 내적은 다음과 같이 계산되는 , 벡터의 곱이다. u · v = ux · vx + uy · vy + uz · vz &...
blog.naver.com
https://gnaseel.tistory.com/18
[유니티] 게임에서 Vector의 내적, 외적이 갖는 의의
보통 고등학교 때 기하와 벡터를 다루며 기본적으로 내적과 외적을 배우는데, 다들 전문적인 물리 엔진 제작과 같은 전문적인 업무가 아니면 쓸모없다고 생각하지만, 의외로 단순한 작업에서도
gnaseel.tistory.com
'게임개발 > 스터디' 카테고리의 다른 글
[스터디] 컴포넌트 패턴 (0) | 2024.06.05 |
---|---|
[스터디] Reflection(리플렉션) (0) | 2024.05.14 |
[스터디] 유니티 이벤트 함수 호출 순서 (0) | 2024.05.13 |
[스터디] 사용해 본 디자인 패턴 정리 (0) | 2024.05.13 |
[스터디] GC란? (0) | 2024.05.12 |