벡터(Vector) 下
◎벡터의 크기
기하학적으로 한 벡터의 크기는 해당 방향이 있는 선분의 길이이다.
벡터의 크기는 이중 수직선으로 표기한다.
Ex ) 벡터 u의 크기는 ||u||이다.
3차원 벡터의 크기는 피타고라스의 정리를 두 번 적용해 구할 수 있다.
어떻게 ||u||가 저 식이 될까?
우선 u의 크기를 빗변으로, y축을 높이 y로 두고 원점으로부터 y까지 직각이 되는 거리를 a라고 둔다.
그러면 ||u|| (빗변) 은 피타고라스의 정리를 통해 y제곱과 a제곱에 루트를 씌운 값이 된다.
그리고 거기서 a를 구하기 위해 피타고라스의 정리를 한 번 더 사용한다.
a를 빗변으로 두고 x를 밑변, z축의 값을 높이 z로 두어 계산한다.
그러면 ||u||가 위와 같은 식이 된다.
벡터를 순수하게 방향을 나타내는 용도로만 사용하면 벡터의 길이는 그다지 중요하지 않을 수 있다.
그런 방향 전용 벡터에서는 벡터의 길이를 정확히 단위 길이인 1로 맞추어 두는 것이 편리하다.
따라서 벡터의 길이를 단위 길이가 되게 해서 단위 벡터로 만드는 것을 가리켜 벡터의 정규화(normalization)라고 부른다.
벡터의 각 성분을 벡터의 크기로 나누면 벡터가 정규화 된다.
왜 벡터의 크기로 각 성분을 나누는지 이해가 되지 않는다면 이렇게 생각하면 쉽다.
벡터의 곱셈에는 두 가지 종류가 있다. 내적과 외적이다.
◎ 내적
스칼라 값을 나타내는 벡터 곱셈의 일종으로 점곱(dot product)라고도 한다.
내적은 결과 값이 뒤에 나올 외적의 결과와 달리 스칼라 값으로 나온다.
u = (u1, u2, u3), v = (v1, v2, v3)라고 가정했을 때 내적은
u · v = u1v1 + u2v2 + u3v3 |
즉, 대응되는 성분들의 곱들의 합이다.
코사인 법칙을 이용하면 내적의 기하학적 의미를 알아낼 수 있다.
u · v = ||u|| ||v|| cosθ |
여기서 θ는 벡터 u와 v 사이의 각도이다. 0 ≤ θ ≤ π 사이의 값.
따라서 위의 식은 두 벡터의 내적이 두 벡터 사이의 각도의 코사인을 벡터 크기들로 비례 시킨 것이다.
특히 u와 v가 둘 다 단위 벡터이면 u, v의 내적은 두 벡터 사이의 각도의 코사인이다.
u · v = 1 * 1 * cosθ = cosθ |
1. u·v = 0 이면 u ⊥ v이다. ( = 두 벡터는 직교한다. )
2. u·v > 0 이면 두 벡터 사이의 각도 θ는 90˚보다 작다. ( = 두 벡터는 예각을 이룬다.)
3. u·v < 0 이면 두 벡터 사이의 각도 θ는 90˚보다 크다. ( = 두 벡터는 둔각을 이룬다. )
◎ 외적
결과 값이 스칼라 값을 나타내는 내적과는 달리 외적의 결과는 또 다른 벡터로 가위곱(cross product)라고도 한다.
외적은 오직 3차원 벡터에 대해서만 정의된다.
두 3차원 벡터 u와 v의 외적을 구하면 u와 v 모두에 직교(수직)인 또 다른 벡터 w가 나온다.
즉, w는 u와 직교이고 v와도 직교이다.
u = (u1, u2, u3), v = (v1, v2, v3)라고 가정했을 때 외적은 다음과 같이 구한다.
w = u x v = (u2v3 - u3v2, u3v1 - u1v3, u1v2 - u2v1) |
벡터의 내적과 외적 활용에 대한 자세한 내용은
https://hellowoori.tistory.com/46?category=729196 이 블로그에 잘 정리가 되어있는 것 같다.
참고 출처
Direct11을 이용한 3D게임프로그래밍 (저; 프랭크 D. 루나, 역; 류광, 출판사; 한빛미디어)
'GameProgramming > 게임수학 & 물리' 카테고리의 다른 글
[게임수학] 행렬 上 (연산, 단위행렬, 전치행렬) (0) | 2020.02.12 |
---|---|
[게임 수학] 포물선과 원 충돌체크 (0) | 2020.01.21 |
[게임 수학] 두 점 사이의 거리 구하기 (0) | 2020.01.21 |
[게임 수학] 삼각함수(sin, cos, tan) (0) | 2020.01.20 |
[게임수학] 벡터(Vector) 上 (0) | 2020.01.09 |