선형대수학 공부 추천추천

선형대수학 영상

  • 지금 보고 있는데 이 영상 시리즈가 미친 거 같다. 나한텐 선대 교과서


벡터(Vector)

image

n차원 공간에서 크기(길이)방향을 가진 것

일종의 화살표가 있는 직선

속도, 변위, 가속도, 힘… 등

image

사용처

  • 이동, 감시, 추적 등
  • 파티클 시스템, 빛, 카메라 등

표현

u = (ux, uy, uz)

벡터는 위치 개념이 없기 때문에 길이와 방향이 같으면 어디에 위치하든 같은 벡터

image


벡터의 길이(스칼라, Scala)

선분의 길이.

사용처

  • 벡터 스케일링

표현

// || || 기호. 절대값 기호와는 구분된다.
||u||
// 벡터 (x, y, z)에 대해
||u|| == sqrt(ux^2 + uy^2 + uz^2)


단위벡터(unit vector)

벡터의 크기(길이)가 1인 벡터

사용처

  • 아래 정규화 파트 참고


영 벡터(zero vector 혹은 null vector)

벡터의 크기(길이)가 0인 벡터

사용처

  • 어떤 벡터를 0으로 만들 때


벡터의 정규화(normalization)

벡터의 크기를 1로 만들어 단위 벡터가 되도록 하는 것

사용처

  • 방향이 같은 벡터를 정규화해 모두 같은 벡터로 만들 때
  • 벡터를 계산할 때 크기를 제외하고 방향만 고려하고 싶을 때
  • 캐릭터를 이동시킬 때 벡터와 스칼라의 곱을 사용하면, 캐릭터가 이동할 벡터를 구할 수 있다 !
  • 캐릭터가 동일한 지점으로 이동하려 할 때 같은 속도로 이동하기 위함

image

벡터의 성분을 벡터의 크기로 나누면 정규화 됨

// u: 벡터의 성분
// ||u||: 벡터의 크기
u / ||u|| == ( ux / ||u|| , uy / ||u|| , uz / ||u|| )


벡터의 합연산

각 대응하는 성분을 더해주면 벡터의 합이 나온다.

(ux, uy, uz) + (vx, vy, vz) == (ux + vx, uy + vy, uz + vz)

image


벡터의 차연산

벡터의 합연산에서 부호만 반대

사용처

  • 두 점 사이의 거리를 계산할 때


벡터의 곱연산

벡터의 곱셈에는 내적, 외적이 있다.

벡터를 마치 수처럼 곱하는 개념이다.


내적(dot product, inner product, scalar product)

방향이 일치하는 만큼만 곱

사용처

  • 벡터의 특정 방향, 성분, 투영(사영)의 크기, 일의 크기, 전류 밀도에 대한 전류의 크기 등을 구할 때
  • 위치 앞뒤 판별
    • 플레이어의 시선을 중심으로 좌, 우 90도가 넘어가면 코사인 값이 음수.
    • 플레이어 시선의 벡터와 적의 위치벡터를 내적해서 양수값이면 플레이어의 정면, 음수값이면 플레이어의 후면
  • 시야각
    • 플레이어의 시야각 θ, 플레이어의 시선과 적의 위치 벡터를 내적해서 얻는 각도가 θ보다 크면 시야 내부에 위치

내적은 한 벡터를 다른 벡터로 정사영 시켜서, 그 벡터의 크기를 곱한다.

image

규칙

  • 두 벡터의 방향이 같으면, 두 벡터의 크기를 그냥 곱한다.
  • 두 벡터가 이루는 각이 90도면, 내적의 값은 0
// 영문표시
u dot v == uv 
// 공식: x는 x끼리, 각 성분 간 곱한 후, 모두 더한 스칼라 값
uv == ||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) 알고리즘 사용!

두 벡터의 크기와 두 벡터 사이의 각의 사인값, 수직인 벡터의 곱으로 정의

(== 두 벡터 길이를 변으로 하는 평행사변형의 넓이)

image

// 공식
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|

공식을 행렬 형태로 풀어 표현하면 다음과 같다.

image

외적의 크기의 절반은 삼각형의 넓이

1/2 * a * b * sin θ

결과값

  • 벡터

외적은 교환법칙이 성립되지 않는다. 대신, 다음과 같이는 된다.

A x B = -B x A


CCW(Counter Clockwise) 은 별도로 포스트..


참고

선형대수학 영상

벡터 개념 참고링크

벡터 외적 내적 참고링크

벡터 게임개발 시 적용 참고링크


※ 수정하거나 개선할 점이 있다면 말씀해주시면 감사하겠습니다.

댓글남기기