벡터 개념 - 단위벡터, 백터의 길이(스칼라), 정규화, 합연산, 곱연산, 내적, 외적
선형대수학 공부 추천추천
- 지금 보고 있는데 이 영상 시리즈가 미친 거 같다. 나한텐 선대 교과서
벡터(Vector)
n차원 공간에서 크기(길이)와 방향을 가진 것
일종의 화살표가 있는 직선
속도, 변위, 가속도, 힘… 등
사용처
- 이동, 감시, 추적 등
- 파티클 시스템, 빛, 카메라 등
표현
u = (ux, uy, uz)
벡터는 위치 개념이 없기 때문에 길이와 방향이 같으면 어디에 위치하든 같은 벡터
벡터의 길이(스칼라, Scala)
선분의 길이.
사용처
- 벡터 스케일링
표현
// || || 기호. 절대값 기호와는 구분된다.
||u||
// 벡터 (x, y, z)에 대해
||u|| == sqrt(ux^2 + uy^2 + uz^2)
단위벡터(unit vector)
벡터의 크기(길이)가 1인 벡터
사용처
- 아래 정규화 파트 참고
영 벡터(zero vector 혹은 null vector)
벡터의 크기(길이)가 0인 벡터
사용처
- 어떤 벡터를 0으로 만들 때
벡터의 정규화(normalization)
벡터의 크기를 1로 만들어 단위 벡터가 되도록 하는 것
사용처
- 방향이 같은 벡터를 정규화해 모두 같은 벡터로 만들 때
- 벡터를 계산할 때 크기를 제외하고 방향만 고려하고 싶을 때
- 캐릭터를 이동시킬 때 벡터와 스칼라의 곱을 사용하면, 캐릭터가 이동할 벡터를 구할 수 있다 !
- 캐릭터가 동일한 지점으로 이동하려 할 때 같은 속도로 이동하기 위함
벡터의 성분을 벡터의 크기로 나누면 정규화 됨
// u: 벡터의 성분
// ||u||: 벡터의 크기
u / ||u|| == ( ux / ||u|| , uy / ||u|| , uz / ||u|| )
벡터의 합연산
각 대응하는 성분을 더해주면 벡터의 합이 나온다.
(ux, uy, uz) + (vx, vy, vz) == (ux + vx, uy + vy, uz + vz)
벡터의 차연산
벡터의 합연산에서 부호만 반대
사용처
- 두 점 사이의 거리를 계산할 때
벡터의 곱연산
벡터의 곱셈에는 내적, 외적이 있다.
벡터를 마치 수처럼 곱하는 개념이다.
내적(dot product, inner product, scalar product)
방향이 일치하는 만큼만 곱
사용처
- 벡터의 특정 방향, 성분, 투영(사영)의 크기, 일의 크기, 전류 밀도에 대한 전류의 크기 등을 구할 때
- 위치 앞뒤 판별
- 플레이어의 시선을 중심으로 좌, 우 90도가 넘어가면 코사인 값이 음수.
- 플레이어 시선의 벡터와 적의 위치벡터를 내적해서 양수값이면 플레이어의 정면, 음수값이면 플레이어의 후면
- 시야각
- 플레이어의 시야각 θ, 플레이어의 시선과 적의 위치 벡터를 내적해서 얻는 각도가 θ보다 크면 시야 내부에 위치
내적은 한 벡터를 다른 벡터로 정사영 시켜서, 그 벡터의 크기를 곱한다.
규칙
- 두 벡터의 방향이 같으면, 두 벡터의 크기를 그냥 곱한다.
- 두 벡터가 이루는 각이 90도면, 내적의 값은 0
// 영문표시
u dot v == uㆍv
// 공식: x는 x끼리, 각 성분 간 곱한 후, 모두 더한 스칼라 값
uㆍv == ||u|| * ||v|| * cos θ == ux*vx + uy*vy + uz*vz
결과값
- 스칼라
- uㆍv == 0 이면, 각 차는 직각이다.
- uㆍv < 0 이면, 각 차는 둔각이다.
- uㆍv > 0 이면, 각 차는 예각이다.
내적은 교환법칙이 성립된다.
외적(cross product, outer product, vector product)
두 벡터 간의 텐서 곱. 결과값은 벡터다.
사용처
- 면 벡터의 표현, 토크, 각속도 등을 구할 때
- 두 벡터에 수직하는 벡터, 한 평면의 법선벡터(수직인 벡터)를 구할 때
- 삼각형의 넓이, 평행사변형의 높이와 넓이를 구할 때
- 위치 좌우 판별
- 플레이어의 시선과 up 벡터를 중심으로 외적하면 플레이어의 왼쪽에 있는 오브젝트는 양수, 오른쪽에 있는 오브젝트는 음수를 반환
- 선분교차(충돌) 판정 시 외적을 통한 CCW(Counter ClockWise) 알고리즘 사용!
두 벡터의 크기와 두 벡터 사이의 각의 사인값, 수직인 벡터의 곱으로 정의
(== 두 벡터 길이를 변으로 하는 평행사변형의 넓이)
// 공식
A x B = an^ * ||u|| * ||v|| * sin θ
// an^: 수직인 벡터의 곱
// A = (a1, a2, a3), B = (b1, b2, b3) 일 때
A x B = (a2*b3 - a3*b2, a3*b1 - a1*b3, a1*b2 - a2*b1)
// 행렬식을 이용하면 다음과 같이 표현
A x B = det |i j k |
|a1 a2 a3|
|b1 b2 b3|
공식을 행렬 형태로 풀어 표현하면 다음과 같다.
외적의 크기의 절반은 삼각형의 넓이
1/2 * a * b * sin θ
결과값
- 벡터
외적은 교환법칙이 성립되지 않는다. 대신, 다음과 같이는 된다.
A x B = -B x A
CCW(Counter Clockwise) 은 별도로 포스트..
참고
※ 수정하거나 개선할 점이 있다면 말씀해주시면 감사하겠습니다.
댓글남기기