Vector란?
3차원 공간에서 벡터는 크기(길이)와 방향을 가진 것으로 일종의 화살표가 있는 직선이라고 생각할 수 있다.벡터는 위치 개념이 없기 때문에 길이와 방향이 같으면 어디에 위치하든 같은 벡터라고 할 수 있다.만약, 벡터의 크기(길이)가 1이면 단위 벡터(unit vector)라고 말하고, 길이가 0인 벡터는 영 벡터(zero vector 혹은 null vector)라고 한다.
벡터는 3차원 공간으로도 이야기 할 수 있다.
엄밀히 말해서는 점과 벡터로 이루어진 아핀 공간(Affine Space)이라고 할 수 있다.
벡터의 크기 (길이)
벡터의 크기는 방향을 가진 선분의 길이이다. 벡터의 성분이 주여졌다고 할 때, 다음과 같은 식을 이용해 벡터의 크기를 대수학적으로 계산해낼 수 있다.
|| u || = ( ux * ux + uy * uy + uz * uz)^2 ;
벡터의 정규화 (Normalize)
벡터를 정규화 하는 벡터의 크기를 1로 만들어서 단위 벡터가 되도록 하는 것이다.
벡터의 성분을 벡터의 크기로 나누면 정규화가 된다.
주로 스칼라 연산은 단위 벡터와 함께 사용되는데, 단위 벡터는 크기가 1이어서 크기는 고려하지 않고 방향만을 나타내기 위해 사용되는 벡터이다.
캐릭터를 이동 시킬때에 단위 벡터와 스칼라의 곱을 사용하면, 캐릭터가 이동할 벡터를 구할 수 있다.
u / || u || = ( ux / || u || , uy / || u || , uz / || u || )
벡터 연산
1. 더하기
각 대응하는 성분을 더해주면 백터의 합이 나온다.
쉽게 2개의 벡터의 합은 중앙으로 향하는 벡터가 생성된다고 보면 쉽겠다.
조금 더 자세히 말하자면 2개의 벡터의 합은 벡터 B에서 시작(꼬리)해서 A로 끝나는(머리) 벡터가 된다.
물체에 여러 힘이 주어졌을때 최종적으로 주는 합력을 구할때 사용할 수도 있다.
u + v = (ux + vx , uy + vy , uz + vz)
|
|
2. 뺴기
더하기와 비슷하다. 벡터의 대응되는 성분을 빼면 된다.
중요한건 빼려고 하는 백터 더히기의 역원을 뺸다고 생각해야 한다는 것이다.
u - v = u + (-v) = (ux - vx , uy - vy , uz - vz)
|
3. 곱하기
* 스칼라
벡터 공간의 세가지 요소 중 하나이다, 쉽게 실수로 생각하면 된다.
1. 벡터와 스칼라 곱 (백터의 배율)
음수의 곱을 사용하지 않는 이상 벡터의 방향은 변하지 않으며, 음수를 이용하는 경우에는 벡터의 방향이
뒤집힌다.(반전 된다.)
ku = (kux , kuy, kuz)
2. 벡터와 벡터의 곱 (내적)
두 벡터간의 내적이 벡터의 크기 배율을 가진 벡터 간 각도의 코사인이다.
만약 u와 v가 모두 단위 벡터일 경우 두 벡터의 내적은 두 벡터간의 코사인이 된다.
두 벡터의 내적의 결과로 플레이어와 적의 방향(앞 뒤)를 구분할 수 있다.
만약 내적의 결과가 0일경우 두 벡터의 각도는 직각이다.
만약 내적의 결과가 0보다 크다면 두 벡터 간의 각도는 90도 보다 작다.
만약 내적의 결과가 0보다 작으면 두 벡터 간의 각도는 90도 보다 크다.
u.v = ux * vx + ux * vy + uz * uz = s (값은 벡터가 아닌 실수)
|
3. 벡터와 벡터의 곱 (외적)
두 개의 벡터의 외적을 수행하면 다른 벡터인 p를 얻으며 , 이는 두개의 벡터에 서로 직각을 이루게 된다.
p = u * v = [ (uy * vz - uz * vy) , (uz * vx - ux * vz) , (ux * vy - uy * vx) ]
|
|
내용 출처 : DirectX 9을 이용한 3d 게임 프로그래밍 입문
이미지 출처 : 구글 이미지 검색
'프로그래밍 관련 > 게임 수학' 카테고리의 다른 글
[게임 수학] 행렬 - Matrix (0) | 2016.10.05 |
---|---|
[게임 수학] 삼각함수 [Trigonometric Function] - 2 (0) | 2016.08.06 |
[게임 수학] 삼각함수 [Trigonometric Function] - 1 (0) | 2016.08.05 |