728x90

1. 내적

  • 점곱 ( dot product )이라고도 부르는 내적 ( inner product )은 스칼라값을 내는 벡터 곱셈의 일종이다.
  • 결과가 스칼라라서 스칼라 곱 ( scalar product )이라고 부르기도 한다.
  • 다른 말로 하면 내적은 대응되는 성분들의 곱들의 합이다.
  • U = ( Ux, Uy, Uz ), V = ( Vx, Vy, Vz ), UV 내적 = Ux*Vx + Uy*Vy + Uz*Vz
  • UV 내적 = ||U|| ||V|| cosA, A는 벡터 U와 V 사이의 0 <= A <= 180를 만족하는 각도이다.
  • 특히 U와 V 둘 다 단위벡터인 경우 UV 내적값은 두 벡터 사이의 각도의 코사인이다 ( UV내적 = cosA )
  • UV 내적 = 0 이면, cosA = 0인경우 A = 90도 UㅗV이다. ( 두 벡터는 직교이다. )
  • UV 내적 > 0 이면, 두 벡터 사이의 각도 A는 90도 보다 작다. ( 두 벡터는 예각을 이룬다. )

1.1 내적을 이용한 두 벡터 사이의 각도

  • U = ( 1, 2, 3 ), V = ( -4, 0, -1 )
  • UV내적 = ( 1*-4 + 2*0 + 3*-1 ) = -7
  • ||U|| = 루트 ( 1^2 + 2^2 + 3^2 ) = 루트 ( 14 )
  • ||V|| = 루트 ( -4^2 + 0^2 + -1^2 ) = 루트 ( 17 )
  • UV내적 = ||U|| ||V|| cosA
  • UV내적 / ||U|| ||V|| = cosA
  • -7 /  루트( 14 ) 루트 (17 ) = cosA , A = 약 117도

 

2. 외적

  • 가위곱 ( cross product )라고도 부르며 외적 ( outer product )는 결과가 스칼라인 내적과는 달리 외적의 결과는 벡터이다.
  • 또한, 외적은 오직 3차원 벡터에 대해서 정의된다. ( 2차원 벡터들에 대해서는 외적이라는 것이 없다. )
  • 두 차원 벡터 U와 V의 외적을 취하면 U와 V 모두에 직교인 또 다른 벡터 W가 나온다
  • 즉, 벡터 W는 U와 직교이고, V와도 직교이다.
  • U = ( Ux, Uy, Uz ), V = ( Vx, Vy, Vz ), UV 외적 = ( UyVz - UzVy, UzYx - Ux-Vz, UxYy - UyVx ) = W
  • *오른손 좌표계를 기준으로 계산할 때에는 오른손 엄지 법칙을 따라야 한다. 즉 오른손을 펼쳐서 첫 벡터의 U의 방향을 가리킨 상태에서 손가락들을 굽혀서 V의 방향을 가리켰을 때 엄지손가락이 가리키는 방향이 바로 W = UxV의 방향이다.

2.1 외적을 이용한 두 벡터의 직교 벡터 W , Z

  • U = ( 2, 1, 3 ), V = ( 2, 0, 0 )
  • W = UxV
  • W = ( UyVz - UzVy, UzVx - Ux-Vz, UxVy - UyVx ) 
  • W = ( 2, 1, 3 ) x ( 2, 0, 0 )
  • W = ( 1*0 - 3*0, 3*2 - 2*0, 2*0 - 1*2 ) = ( 0, 6, -2 )
  • Z  = VxU
  • Z = ( Vy,Uz - VzUy, VzUx - Vx-Uz, VxUy - VyUx ) 
  • Z = ( 2, 0, 0 ) x ( 2, 1, 3 )
  • Z = ( 0*3  - 0*1, 0*2 - 2*3, 2*1 - 0*2 ) = ( 0, -6, 2 )
  • 결과를 확인해보면 UxV != VxU 이므로, 외적에는 교환 법칙이 성립하지 않는다.
  • UxV = -V x U 임을 증명하는 것 도 가능하다.
  • 외적으로 얻은 벡터가 어떤 방향인지는 왼손 좌표계 법칙으로 알 수 있다.

2.2 외적의 결과가 직교인지 증명

  • 외적의 결과가 직교인지 확인하는 방법은 내적에서 확인했듯이 UW 내적 값이 0인지 확인하면 된다.
  • U = ( 2, 1, 3 ), W = ( 0, 6, -2 )
  • UW 내적 = ( 2*0 + 1*6 + 3*-2 ) = 0 이므로 직교이다.

 

 

 

 

반응형

'DirectX12 > 게임 수학' 카테고리의 다른 글

[게임 수학] 벡터 대수  (0) 2023.02.25
728x90

1. 벡터 정의

  • 벡터는 크기와 방향을 모두 가진 수량을 가리키는 말이며, 힘이나 변위, 속도 ( velocity )를 나타내는 데 쓰인다.
  • 3차원 게임에서 플레이어가 바라보는 방향이나 다각형이 향한 방향, 광선이 이동하는 방향, 한 표면에서 광선이 반사되는 방향 등 순수한 방향만 나타낼 때에도 벡터를 사용한다.

1.1 벡터값 수량 예시

  • 힘    ( force : 힘은 특정한 방향과 세기로 가해지는데, 세기 ( strength ) 가 곧 크기이다 )
  • 변위 ( displacement : 한 입자의  최종적인 이동 방향 및 거리 )
  • 속도 ( 빠르기와 방향 )

2. 벡터와 좌표계

  • 컴퓨터는 벡터들을 기하학적으로 다루지 못하므로, 벡터들을 수치적으로 지정하는 방법이 필요하다.
  • 그 방법은, 공간에 하나의 3차원 좌표계를 도입하고 모든 벡터를 그 꼬리가 그 좌표계의 원점과 일치하도록 이동하는 것이다.
  • 그러면 하나의 벡터를 그 머리 ( 화살표 끝 )의 좌표로 규정할 수 있으며, v = ( x, y, z )로 표기할 수 있다.
  • 이렇게 하면 3차원 벡터를 컴퓨터 프로그램 안에서 부동소수점 값 세 개로 표현할 수 있다.

 

3. 벡터 연산 U = ( Ux, Uy, Uz ), V = ( Vx, Vy, Vz )

  • 두 벡터의 상등 조건은, 각 좌표 성분들이 모두 상등인 경우이다.  ( Ux = Vx, Uy = Vy, Uz = Vz인 경우 U = V 상등이다. )
  • 벡터 덧셈은 성분별로 이루어진다. ( U + V = ( Ux+Vx, Uy+Vy, Uz+Vz ) )
  • 벡터에 스칼라를 곱할 수 있으며, 그 결과는 벡터이다. ( 스칼라 k * U = ( kUx, kUy, kUz ) )
  • 벡터 뺄셈은 벡터 덧셈과 스칼라 곱셉을 통해서 정의된다.( U - V = U + (-1 * V ) = U + ( -V ) = ( Ux - Vx, Uy - Vy, Uz - Vz )

4. 길이와 단위벡터

  • 기하학적으로 한 벡터의 크기는 해당 지향 선분의 길이이다.
  • 벡터의 크기 ( 길이 )는 이중 수직선으로 표현한다.
  • U의 크기는 ||U||이다, 벡터 U = ( x, y, z )가 주어졌을 때 벡터의 크기는 피타고라스의 정리를 두 번 적용해서  계산할 수 있다.
  • ||U|| = 루트 ( x^2, y^2, z^2 )
  • 벡터를 순전히 방향을 나타내는 용도로만 사용하는 경우에는 벡터의 길이가 중요하지 않다.
  • 그런 '방향 전용' 벡터는 길이를 정확히 1(단위 길이)로 맞추어 두면 편리하다.
  • 크기가 1인 벡터를 단위벡터 (unit vector)라고 부르고, 임의의 벡터를 단위 벡터로 만드는 것을 정규화(normalization)라고 부른다.
  • 벡터의 각 성분을 벡터의 크기로 나누면 벡터가 정규화된다.
  • U / ||U|| = ( Ux / ||U||, Uy / ||U||, Uz / ||U|| )
  • ex) U = ( 0, 3, 4 ), ||U|| = 루트 ( 0^2 + 3^2 + 4^2 ) = 루트 ( 25 ) = 5, U / ||U|| = ( Ux / 5, Uy / 5, Uz / 5 )
반응형

'DirectX12 > 게임 수학' 카테고리의 다른 글

[게임 수학] 내적과 외적  (0) 2023.02.25

+ Recent posts