개발하는 리프터 꽃게맨입니다.

[수학] 내적: 벡터 공간의 분석과 응용 본문

컴퓨터 그래픽스/수학

[수학] 내적: 벡터 공간의 분석과 응용

파워꽃게맨 2024. 7. 11. 22:48

1. 벡터의 내적

벡터의 내적 Dot Production 은 같은 차원의 두 벡터가 주어졌을 때,

벡터를 구성하는 각 성분을 곱한 후 이들을 더해 스칼라를 만들어내는 연산이다.

기호는 가운뎃점 ㆍ을 사용한다.

 

어떤 2차원 벡터 u (a, b), v (c, d) 가 있을 때

1) 내적의 성질

  • 내적은 스칼라의 곱셈과 덧셈으로 구성되어 있으므로 교환법칙이 성립한다.
    교환 법칙 성립
  • 결합 법칙은 성립하지 않는다.
  • 덧셈에 대해서 분배 법칙이 성립한다.
  • 서로 같은 벡터를 내적하면 벡터의 크기를 제곱한 결과가 나온다.
  • 내적의 성질은 모든 차원의 벡터에 대해서 동일하게 적용된다.

2) 내적과 삼각함수와의 관계

두 벡터 u, v가 있을 때, 두 벡터의 내적 값은 두 벡터 사잇각에 대한 cos 함수와 비례하는 특징을 가진다.

 

두 벡터 u, v의 사잇각을 세타라고 할 떄, 내적과 cos 함수의 관계는 다음과 같다.

이를 '벡터 내적의 코사인 공식' 이라고 한다.

 

 

삼각형을 구성하는 점과 벡터가 위와 같이 존재한다고 가정하자.

 

벡터 b = 벡터 a - 벡터 c 이다.

벡터 b의 크기는 다음과 같이 정리된다.

 

같은 벡터를 내적하면 벡터 크기의 제곱이 되므로 아래와 같은 식이 만족한다.

결과적으로 벡터 내적의 코사인 공식을 유도할 수 있다.

 

이러한 내적의 성질은 덧셈과 곱셈만 사용해 cos 함수 값읋 빠르게 계산할 수 있어 유용하게 활용된다.

 

또한, 영벡터가 아닐 때 내적 값이 0이 되면, 이는 cos 함수의 값이 0이 된다는 의미이다.

즉, 두 벡터 u, v의 사잇각이 90' 혹은 270' 라는 의미

다르게 말하면 두 벡터가 직교한다는 의미이다.

 

즉, 내적을 통해 두 벡터의 직교성을 판별할 수 있다.

 

정리하자면 벡터의 내적은 cos θ 의 값을 빠르게 찾거나, 두 벡터의 직교성을 판별하는데 주로 활용된다. 

 

2) 직교 행렬 

다음과 같은 조건을 만족하는 행렬을 직교 행렬이라고 한다.

 

  • 정방 행렬이다.
  • 행렬을 구성하는 모든 열벡터, 행벡터의 크기가 1이다.
  • 벡터들이 서로 직교한다.

직교 행렬의 특징은 직교행렬의 전치가 직교행렬의 역행렬과 같다는 것이다.

그렇다면 직교행렬과 직교행렬의 전치는 서로 곱했을 때 항등행렬을 만들 수 있다는 것을 의미한다.

이는 내적으로 증명할 수 있다.

 

회전 변환 행렬은 대표적인 직교행렬 중 하나이다.

회전 변환 행렬의 각 행벡터와 열벡터의 크기가 1이고 서로 직교하기 때문이다.

 

앞선 포스팅에서 회전 변환 행렬의 역행렬을 전치 연산으로 쉽게 구했던 것을 기억할 것이다.

이는 회전행렬이 직교 행렬이기 때문이다. 

 

3) 강체변환 Rigid Transformation

선형 변환 중 물체의 형태가 그대로 유지되는 선형 변환을 강체 변환이라고 한다.

선형 변환이 강체 변환이 되기 위한 조건은 다음과 같다.

 

  • 공간을 구성하는 모든 기저 벡터의 크기가 1이어야 한다.
  • 모든 기저벡터는 서로 직교해야 한다.
  • 행렬식 값이 1이어야 한다.

회전 변환 행렬은 대표적인 강체 변환 행렬이다.

따라서 회전 변환은 물체의 형태를 변화시키지 않는다.

 

회전 변환 행렬의 기저 벡터의 크기는 모두 1이며,

기저 벡터가 서로 직교하고 있고, 회전 변환 행렬의 행렬식 값은 언제나 1이므로, 회전 변환 행렬은 강체 변환임을 확인할 수 있다.

 


2. 시야 판별

1) 앞뒤 판별

3차원 공간에서 목표물이 시야의 앞에 있는지 뒤에 있는지 구분할 때 내적을 통해 쉽게 파악할 수 있다.

 

벡터 v, u 가 있을 때 그 내적은

|v||u| cos θ 로 나타낸다.

 

 

이 그림에서 첫 번째 벡터를 캐릭터의 시야라고 생각하고

두 번째 벡터가 캐릭터에서 목표물로 향하는 벡터라고 생각해보자.

 

캐릭터의 시야에 목표물이 있기 위해서는 사잇각이 -90 ~ 90 값을 가져야 한다.

즉, 두 벡터의 내적이 양수일 경우 목표물이 시야에 있다고 판단할 수 있다.

 

그러나 내적이 음수일 경우엔 목표물이 캐릭터 시야의 뒤에 있다고 판단할 수 있다.

 

또, 내적의 결과 부호는 다음과 같이 해석할 수 있다.

  • 내적 결과가 양수 : 두 벡터는 같은 방향을 향하고 있다.         ( = 캐릭터 앞에 목표물이 있다.)          
  • 내적 결과가 음수 : 두 벡터는 다른 방향을 향하고 있다.         ( = 캐릭터 뒤에 목표물이 있다.)
  • 내적 결과가 0 : 두 벡터는 서로 직교한다.                               ( = 캐릭터 바로 옆에 목표물이 있다.)

 

2) 시야 판별

이번에는 캐릭터에 시야각이라는 특성을 부여해보자.

 

캐릭터에 부여한 시야각을 '베타'라고 해보자.

그러면 양쪽으로 균등하게 '베타/2' 가 설정된다.

 

캐릭터의 시선 벡터를 f라고 하고, 캐릭터에서 목표물로 향하는 벡터를 v라고 하자.

그리고 그 사잇각을 '알파' 라고 하자.

 

그러면 내적으로 캐릭터의 시야에 목표물이 탐지되는지 여부를 파악해보자.

 

간단하게 생각하면 사잇각 '알파'가 '베타/2'보다 작으면 탐지가 되고

아니면 안되는 것이라고 판단할 수 있다.

 

  • 먼저, '코사인 베타/2'의 값을 먼저구한다.
  • 캐릭터의 시선 벡터와 목표물 벡터를 정규화 한다.
  • 두 벡터를 내적한다. 두 벡터는 정규화 벡터이므로 크기가 1이다. 즉, 두 벡터 내적의 결과는 cos '알파' 이다.
  • 코사인 함수는 사잇각이 커질수록 값이 작아지는 특성이 존재한다.
    즉, cos '알파'가 미리 구한 코사인 값보다 크면, 목표물은 시야각에 들어올 것이고
    아니면 시야각에 없을 것이다.

물론 atan2 로도 수행할 수 있다. 그러나 atan2는 계산 오버헤드가 크기 때문에 이 경우에는 내적을 사용하는 것이 좀 더 괜찮은 방법이다.


3. 조명 효과의 구현

확산 반사 모델 중 일반적으로 사용되는 모델은 램버트 반사 혹은 람베르트 반사이다.

램버트 반사 모델은 계산량이 적어 속도는 빠르지만 그럴듯한 조명 효과를 줄 수 있기에 실시간 조명 구현에 널리 사용된다.

 

표면에서 반사되는 빛의 세기는 표면의 법선 단위 벡터와 표면에서 광원으로의 단위 벡터의 사잇각의 cos 값에 비례한다는 것이 램버트 반사 모델의 주요 내용이다.

 

이 공식은 셰이더 조명 공식의 가장 기본 식이며

표면의 법선 단위 벡터를 N, 표면에서 광원으로의 단위 벡터를 L이라고 했을 때 두 벡터의 내적을 사용하면 램버트 반사 모델에 필요한 사잇각의 cos 값을 적은 계산으로 얻어 낼 수 있다.


4. 투영 벡터

 

벡터 u를 벡터 v에 투영한다는 것은 벡터 v의 방향을 유지하면서 벡터 u의 길이와 비율을 조정하는 것을 의미한다.

벡터 내적은 어떤 벡터를 다른 벡터에 직교 투영하는 용도로 사용된다.

 

내적을 활용해 투영 벡터를 구하는 공식을 유도해보자.

벡터 u를 벡터 v에 투영하는 상황을 생각해보자.

 

투영 벡터 v'의 크기는 쉽게 알 수 있다.

그러면 이제 벡터 v를 정규화시켜서 v'의 크기를 곱하면 투영 벡터 v'를 구할 수 있다.

 

이를 수식으로 표현하면 다음과 같다.

 

cos 값은 내적으로 구할 수 있다.

내적이 |u||v| cos 이므로,  u v의 내적에서 |u||v|를 나누면 된다.

 

단위 벡터도 아래와 같은 식으로 바꿀 수 있다.

그러면 투영 벡터 v' 를 내적 연산 만을 이용해서 표현할 수 있다.

 

만약, 투영 하려는 벡터의 크기가 1이라면 다음과 같이 단순화할 수 있다.

 


5. 연습 문제

1. 벡터 내적의 코사인 공식이 무엇인지 쓰시고, 이 공식을 유도하시오.

2. 직교행렬의 전치가 직교행렬의 역행렬 임을 증명하라.

3. 회전 변환 행렬이 강체 변환임을 증명하라.

4. 캐릭터가 존재하고 시야각이 '베타'일 때, 어떤 물체가 시야각에 존재하는지 검사하는 방법을 2가지 말하시오.

5. 실시간 조명 모델로 널리 사용되는 확산 반사 모델로, 확산 반사의 세기가 표면의 법선 단위 백터와 표면에서 광원으로 향하는 단위 벡터의 사잇각의 cos 값에 비례한다는 반사 모델 무엇인가?

6. 어떤 두 벡터 u, v가 있다고 할 때, 벡터 u를 v에 투영하는 공식을 쓰고, 유도하시오

7. 내적의 연산 성질을 말하여라