70. 내적
내적의 결과는 스칼라값이다. 그래서 스칼라곱이라고도 부른다.
단위벡터를 기준으로,
◾ 두 벡터가 서로 평행하면 결과값은 1이다.
◾ 두 벡터가 서로 직교하면 결과값은 0이다.
◾ 두 벡터의 방향이 반대라면 결과값은 -1이다.
두 벡터의 직교를 기준으로 예각이면 양수, 둔각이면 음수가 된다.
내적을 사용할 수 있는 대표적인 예시로써 적이 플레이어의 앞이나 뒤에 있는지 여부를 판단하거나 적과 플레이어의 방향벡터를 내적하여 서로 마주보고있는지 또는 같은방향(뒤통수)을 보고 있는지를 판단할 수 있다.
즉, 시야판별 또는 백/헤드 어택에 사용할 수 있다는 얘기이다.
근데 이 모양이 코사인 법칙과 매우 닮아있다. 벡터의 크기는 선분의 길이와 동일하므로 치환해서 풀어보면 아래와 같은 식을 유도할 수 있다.
위에서 적은 예시 말고도 셰이더에서 빛이 어떻게 반사되는지 계산하거나 길찾기에서 너무 높은 경사를 지나가지 않도록 조절하는데 사용된다.
내적은 두 벡터끼리 비교하거나 두 벡터 사이의 각도를 재고싶을 때 사용할 수 있다.
71. 외적
외적의 결과는 두 벡터에 직교하는 법선벡터이다. 그래서 벡터곱이라고도 부른다.
내적과 달리 3차원 공간에서만 성립하고 교환법칙이 성립되지 않는다.
또한 외적의 결과로 나온 벡터의 크기는 평행사변형의 넓이와 동일하다.
두 벡터의 각도가 0º 또는 180º라면 영역을 정의할 수 없기 때문에 외적의 결과는 영벡터가 된다.
내적과 비슷하게 각도와 관련되어 있기 때문에 유도해낼 수 있는 식이 존재한다.
외적은 내적과 함께 사용되어 충돌을 감지하거나 물체를 튕기게 하는데 사용된다. 외부 표면을 계산하는데 이용되기도 한다.
72. 반사
어떤 물체가 45º 각도로 벽에 충돌하게 되면 -45º 각도로 튕겨져 나와야 할 것이다. 이 때 반사의 기준은 법선 벡터가 된다.
위와 같은 상황은 벽에 부딪혀서 반사하게되면 y축과 z축은 그대로 유지되고 x축만 벽에 가로막혀서 부호가 반대로 바뀌게 게 될 것이다.
먼저 벽의 정규화된 법선벡터 n을 외적으로 구하고 이후 내적과 스칼라 연산을 통해 반사벡터 r을 구하게 된다.
식과 결과 모두 정규벡터이기 때문에 본래의 속력을 곱해주거나 가속, 감속에 따른 추가 연산을 수행해주면 된다.
73. 평면으로의 사영
우선 어디에 쓰이는지 예시부터 들고 가자.
보통 레이싱 게임에서 차량이 벽에 비스듬히 부딪혔을 때, 그 즉시 멈추는게 아니라 위처럼 벽을 타고 이동하게 된다. 또는 rpg등의 게임에서 캐릭터가 벽에 붙은채로 비스듬하게 전진하면 느린 속도로 벽을 타고 이동한다.
이런것들은 이동 벡터를 평면에 사영시킴으로써 구현할 수 있다.
법선벡터 n이 자기자신을 내적하는것은 n의 크기의 제곱과 동일하다.
만약 n이 정규화 되어있다면 분모는 언제나 1이기 때문에 계산이 조금 더 단순해진다.
사영벡터는 법선벡터와 직교하게된다.
내적 : 연산의 결과는 스칼라값
앞뒤 판별, 시야각 판별, 빛 반사, 경사의 통과 유무
외적 : 연산의 결과는 두 벡터에 직교하는 새로운 벡터
내적과 같이 사용하여 충돌감지, 반사, 평면사영등에 사용됨
'이론 > 게임수학' 카테고리의 다른 글
[게임수학] 벡터와 행렬 (4) (0) | 2023.01.11 |
---|---|
[게임수학] 벡터와 행렬 (3) (0) | 2023.01.11 |
[게임수학] 벡터와 행렬 (1) (0) | 2023.01.10 |
[게임수학] 각도와 원에 대한 소개 (2) (0) | 2023.01.10 |
[게임수학] 각도와 원에 대한 소개 (1) (0) | 2023.01.09 |