Search
Duplicate
↗️

초간단 벡터 내적의 3가지 활용

간단소개
기본적인 내용이지만 모르시는 분 많을지도...?
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Graphics
Scrap
태그
벡터연산
9 more properties

벡터 내적

여기서 말하는 벡터는 C++std::vector가 아니라 수학에서의 벡터입니다.
게임, 특히 클라이언트 개발에서 질리도록 쓰게 될텐데요,
???: 벡터 내적에 대해 아는대로 말해보세요.
면접 중에 이런 질문을 받는다면 어떻게 대답하실 건가요?
벡터 내적의 3가지 활용법에 대해 아주 간단히 알아보겠습니다.

램버트 코사인 법칙

램버트 코사인 법칙이란?
v1v2=v1×v2×cos(사잇각)v_1 \cdot v_2 = |v_1| \times |v_2| \times cos(사잇각)
두 벡터의 내적은 각 두 벡터 길이, 그 사잇각의 코사인을 곱한 것과 같다는 법칙입니다.
어떻게 활용하는지에 대한 글이므로 왜 그렇게 되는지는 다루지 않겠습니다.
이 글에서 소개할 세 가지 방법은 모두 램버트 코사인 법칙을 이용합니다.

모두 단위벡터 → cos(사잇각)cos(사잇각)

램버트 코사인 법칙을 활용하라면 가장 먼저 떠올릴 수 있을 방법입니다.
v1v2=cos(사잇각)v_1 \cdot v_2 = cos(사잇각)이 되기 때문에 acos를 통해 각도를 구할 수 있습니다.
코사인을 구할 때 방향벡터가 있다면 초월함수라서 엄청 느린 코사인을 대신할 수도 있죠.

길이를 모름 → 앞뒷면 판별

코사인은 -90°에서 90°까지는 양수, 그 외에는 음수가 됩니다.
벡터의 길이는 음수가 될 수 없기 때문에 내적에서 부호는 코사인만이 결정할 수 있습니다.
어떤 면의 접선과 뷰 벡터를 내적한 결과가 음수라면 그 면은 뒷면입니다.

하나만 단위벡터 → 수선의 발 길이

위의 두 경우보다는 활용이 드문 경우입니다.
특정 벡터의 주어진 방향에 대한 수선의 발의 길이를 구할 때에도 활용할 수 있습니다.
설명은 사진으로 대체하겠습니다. 다크모드 쓰시는 분들께는 눈뽕 죄송
벡터 내적으로 v1v_1 방향에 내린 v2v_2의 수선의 발을 구하는 과정 (램버트 코사인 법칙, 삼각형의 닮음 활용)