내적, 정사영, 반사 벡터

 

단위벡터란?

크기가 1인 벡터를 단위벡터(Unit vector)라 한다.

일반적으로 벡터 v가 있을 때, v 방향으로의 단위 벡터는 v / |v| 로 주어진다.

예) 벡터 a = (1, 2) 방향으로의 단위 벡터를 구하라.



벡터의 내적?

두 벡터 a = , b = 가 주어질 때 두벡터의 내적은 다음과 같이 정의할 수 있다.


> 0  

각도가 90보다 작다.

= 0

각도가 90도이다.

< 0

각도가 90도 보다 더크다.



벡터의 정사영 (= 투영)? 

정사영된 b방향의 벡터 k라고 할 때, 스칼라 값은

  

와 같이 된다.

벡터 k로 바꾸려면 단위벡터 를 곱한다.

a, b가 노멀라이즈된 벡터라면

k = (a·b)b

b위로의 a의 정사영(projection) 벡터를 다음과 같이 나타낸다. 예제를 통해서 알아보자.
b = 2i + 3j 위로의 a = 4i + j의 정사영은 다음과 같다.


반사 벡터

정확하게 이야기 하면 들어가는 각도와 나가는 각도가 같은 정반사 벡터를 구해 보자.

여기서 L은 라이팅 벡터, N은 면의 법선 벡터, R은 반사 벡터이다.
L과 N을 이용하여 R을 구하여 보자.( 여기서 L과 N은 단위 벡터이다.)

 

<투영 벡터 구하기>

L이 N에 투영 되었을 때의 벡터 K를 구한다.

1. 투영된 벡터의 길이를 구한다.

cosθ = |K| / |L|
|K| = |L| / cosθ
|L|은 단위 벡터이므로 |K| = cosθ = NㆍL
두 벡터가 단위 벡터일때 내적을 구하면 투영된 길이를 구할 수 있다.

2. 투영된 벡터 구하기

벡터 L을 벡터 N에 투영한 벡터 = (벡터 L을 벡터 N에 투영한 길이) N
= (NㆍL)N

<Q값 구하기>

반사 벡터를 구하기 위해 L에서 투영 벡터 K를 빼면 Q를 구할 수 있다.
Q = L - K = L - (NㆍL)N

<반사 벡터 R 구하기>

R+2Q=L

R=L-2Q

R=L-2(L-(NㆍL)N)

R=2(NㆍL)N - L

최종적인 반사 벡터는 R=2(NㆍL)N - L이다.

 

다이렉트 X로 나타내면

D3DXVECTOR3 GetReflectionVector( D3DXVECTOR3 &vVec, D3DXPLANE &plane )
{

    D3DXPlaneNormalize( &plane, &plane );
    D3DXVECTOR3 N(plane.a, plane.b, plane.c );
    return (2 * D3DXVec3Dot(&-vVec, &N)) * N + vVec;
}


<내적에 의한 좌표계 변환>

내적으로 투영된 벡터를 구할수 있다.
두벡터가 A*B = |A||B|cosΘ일때 B에 투영된 벡터는 |A|cosΘ이다.
여기서 acosΘ는 ( Ax * Bx + Ay * By + Az * Bz ) / ( |A||B| )이다.

글로벌 x, y, z를 로컬측 Lx, Ly, Lz 좌표계 기준으로 이동 할때, 새로운 벡터
newx, newy, newz를 구해 보자.

로컬 좌표계에 투영된 벡터, 즉, 로컬 좌표계로 변환하면 다음과 같이 구한다.

newx = Dot( x, Lx )
newy = Dot( x, Ly )
newz = Dot( z, Lz )

원래 좌표계를 새로운 좌표계의 좌표축 벡터와 내적하여 새로운 좌표계에 투영된 벡터를 구할 수 있다.

새로운 좌표계의 정점벡터 = 원래 좌표계 정점벡터 * 새로운 좌표계의 좌표축 벡터

내적에 의한 좌표계 변환의 증명은 뷰변환 행렬을 참조한다.

[펌]

http://blog.naver.com/PostView.nhn?blogId=rantris&logNo=30010988139&redirect=Dlog&widgetTypeCall=true
http://wibler.egloos.com/3576144
http://game.connect.or.kr/
http://cjocjo.pe.kr/수학_2/이차곡선과공간도형http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=29&MAEULNo=12&no=6095&ref=6095

http://www.gpgstudy.com/forum/viewtopic.php?p=98871