벡터(vector)

선형대수학(Linear algebra)의 기본인 벡터에 대해 알아보자.

vector-thumb

  • 선형대수학
  • 수 대신 문자(대수)를 사용한 방정식과 기하학의 만남
  • 점, 선을 데카르트 좌표로 표시하고 방정식을 그래프로 시각화 가능해짐

1. 스칼라와 벡터의 정의

스칼라와 벡터의 차이는 방향 유무에 있다.

  • 스칼라는 방향이 없고 크기만 가진 값이다.
  • 벡터는 크기와 방향을 모두 가진 값이다.

2. 벡터(Orgin: carrier -> Latin: vector)

실수를 순서쌍(tuple)로 구성한 수의 체계(유리수, 무리수, 허수와 같은 수의 한 체개)

vector-carrier

벡터의 크기와 방향

벡터 방향

  • 화살표 시각화
  • 좌표 공간에 따라 2/3차원 표현
  • 같은 크기와 방향이면 동일한 벡터
  • 좌표 원점을 기준으로 점의 위치 표시
  • 벡터 = 끝점 위치 - 시작점 위치
  • vec2(3-1, 4-1) = vec2(2, 3)
  • 벡터 = 변화 혹은 변위(시작점과 끝점 차이)
  • 0 벡터 = 변화 없음

벡터 크기

  • 끝점과 사작점 사이 거리 = 크기 (∥A∥)
  • 크기는 피타고라스 정리로 구함 (a^2 + b^2 = c^2)
  • var dist = Math.sqrt(x*x + y*y)
  • 벡터 각 성분을 크기로 나누면 단위 벡터 (정규화 과정)
  • (3, 4) -> norm(3/5, 4/5) -> (0.6, 0.8)
  • 단위 벡터: 방향은 그대로 크기가 1인 벡터 (방향 벡터)
  • 단위 벡터 = 벡터의 방향
  • 단위 벡터 * 스칼라(크기) = 원래 벡터
  • 단위 벡터는 벡터 방향만 구할 때 사용
  • vec2(0.6*5, 0.8*5) = vec2(3, 4)
var x = 3;
var y = 4;
var dist = Math.sqrt(x*x + y*y);

console.log(x, y); // 3, 4
console.log(dist); // 5

console.log("Normalize");

var nx = x/dist;
var ny = y/dist;
var ndist = Math.sqrt(nx*nx + ny*ny);

console.log(nx, ny); // 0.6, 0.8
console.log(ndist);  // 1

console.log("Restore");

console.log(nx*dist, ny*dist); // 3, 4

3. 벡터 연산

벡터 합

  • A, B 두 벡터 합
  • B 시작점을 A 끝점에 연결 (반대도 가능)
  • A 시작점과 B 끝점을 연결 (A + B)
vec2(A.x + B.x, A.y + B.y); 

벡터 차

  • A, B 두 벡터 차
  • B 벡터 방향을 반대로 하고 벡터 합 (A + -B)
vec2(A.x - B.x, A.y - B.y); 

벡터 스칼라 곱

  • A 벡터 스칼라 곱
  • 벡터 크기에 영향
vec2(A.x * Scalar, A.y * Scalar); 

벡터 내적(dot product)

  • A, B 벡터 내적 (A ● B)
  • 내적 결과는 스칼라 값(스칼라적)
  • A, B 벡터 각 x, y 성분을 곱을 더한 결과
  • A가 B 벡터에 투영된 길이 (B는 단위 벡터)
스칼라 = A.x*B.x + A.y*B.y; // 2차원 내적
스칼라 = A.x*B.x + A.y*B.y + A.z*B.z; // 3차원 내적
  • A ● B = 0, A와 B는 직교(ㅗ)
  • A ● B < 0 (음수), θ > 90도
  • A ● B > 0 (양수), θ < 90도
  • A ● B = ∥A∥∥B∥cosθ
  • 내적과 두 벡터 크기로 두 벡터 사이각 구함

벡터 외적(cross product)

  • A, B 벡터 외적 (A * B = C)
  • 외적 결과는 3차원 벡터 (벡터적)
  • 결과 벡터는 A, B 벡터와 직교하는 C 벡터(x,y,z)
  • 표면 법선(surface normal) 계산
vec3(A.y*B.z - A.z*B.y,  // x
	 A.z*B.x - A.x*B.z,  // y
	 A.x*B.y - A.y*B.x); // z

4. 참고

##### 네이버 지식백과 - 대수학(代數學, algebra) > 대수학(代數學, algebra)은 수 대신에 문자를 사용하여 방정식의 풀이 방법이나 대수적 구조를 연구하는 학문

네이버 지식백과 - 선형대수학(線型代數學, linear algebra)

주어진 문제들을 추상화(abstraction)시켜 복잡한 문제를 정확하고 효율적으로 해결할 수 있는 방법론

Written on January 3, 2016