수벡터
2차원이나 3차원에서의 점의 위치를 수치의 조합으로 나타낼 경우, 이 조합의 순서에서는 의미가 있다.
x, y, z의 순서를 (x, y, z) 안에서 바꿔 버리면 전혀 다른 좌표가 된다. 이 수치의 조합은 각 요소에 순서가 정해진 배열이지 단순한 수치의 집합(set)이 아니다. 이처럼 순서가 있는 수치로 조합된 벡터를 수벡터라고 부른다.
배열로 벡터를 표현한 경우, 하나하나의 요소를 벡터의 성분이라고 한다. 성분을 옆으로 나열한 형식인 행벡터 또는 성분을 세로로 나열하는 열벡터 표기 방식을 사용한다. 이 둘은 벡터로서 동일하다.
기하벡터
성분의 배열로 벡터 표현을 하지 않고, 크기, 방향을 가진 양으로서 벡터를 정의 할 수 있다.
벡터의 화살표를 시작되는 점을 시점, 화살표 끝 점을 종점으로 표시한다. 해당 벡터는 아래와 같이 표현한다.
단, 식 안의 모든 양이 벡터인 경우처럼 이 표기법을 항상 적용하기가 번잡할 때는 화살표 기호를 생략하기도 한다.
이 기하하적 벡터는 좌표계와 관계없이 존재하는데, 이를 벡터를 기하벡터라고 한다.
벡터 AB가 평행이고, 크기가 같은 벡터인 A`B`가 있다고 할 때, 사작과 종점은 달라도, AB와 A`B`를 같다고 보는 것이 기하벡터의 사고 방식이다. 한편 좌표계와 원점이 없는 기하벡터가 존재하는 장소를 아핀 공간이라 부른다.
스칼라
크기와 방향이 있는 양을 가리켜 벡터라고 한다면, 크기만 있는 일반적인 수치는 보통 스칼라로 부른다. 위치 벡터에서 요소 하나하나는 스칼라다. 길이, 질량 또는 시간은 당연히 방향이 존재하지 않기 때문에 스칼라이다.
컴퓨터의 CPU로는 크기와 방향을 가진 양으로서의 기하벡터 자체를 직접 처리할 수 없으므로, 어디까지나 스칼라양 또는 스칼라 배열로 수벡터를 처리하한다.
벡터 연산 - 덧셈, 뺄셈, 교환법칙, 결합법칙
기하벡터 a와 기하벡터 b가 있을 때, a의 시점부터 b의 종점에 이르는 벡터를 a + b의 합으로서 벡터의 덧셈을 정의할 수 있다.
a + b = b + a
다음 식이 성립하는데, 이를 교환법칙이 성립했다고 한다.
기하벡터 b를 역방향으로 한 역벡터인 -b도 정의할 수 있어, 다음처럼 벡터의 뺄셈을 나타낼 수 있다.
a + (-b) = a - b
뺄셈은 다음과 같이 우변에 마이너스를 부호를 적용할 필요가 있으므로, 교환법칙이 성립되지 않기 때문에 반가환이다.
a - b = -(b - a)
b에 -b를 더한 경우는 원래 시점으로 되돌아가므로, 시점에서 시점으로 향하는 길이가 0이고 방향도 없는 벡터가 된다는 것을 알 수 있다. 이 특별한 벡터를 영벡터(Zero Vector)라고 한다. 영벡터 0에 관해서는 다음 식이 성립된다.
a + 0 = 0 + a = a
또한, 기하벡터 c가 하나 더 있을 때는 다음과 같다.
(a + b) + c = a + (b + c)
이처럼 괄호의 위치를 이동해도 결과가 같은 상태를 결합법칙이 성립했다고 한다.
벡터 연산 - 스칼라 곱셈, 나눗셈
벡터의 뎃셈, 뺄셈은 벡터끼리 연산했지만, 벡터에 스칼라를 곱해 스칼라 곱을 구하거나 벡터를 스칼라로 나눌 수 있다. 그 결과는 다른 길이의 새로운 벡터가 된다.
벡터 a, b와 스칼라 c에 대해 다음처럼 분배법칙이 성립한다.
c(a + b) = ca + cb
단위벡터
크기가 1인 벡터는 단위벡터라 한다. 벡터 a와 같은 방향의 단위벡터 u는 a의 길이 |a|로 a를 나누거나 또는 |a|의 역수를 곱해서 구할 수 있다.
단위벡터를 구하는 조작을 가리켜 벡터를 정규화한다고 표현한다. 유니티에서는 normalized를 사용하면 원래 벡터의 단위벡터를 구할 수 있다.
기저와 좌표계
3D 직교좌표계에서 원점에 해당하는 위치를 시점으로 x축, y축, z축 방향으로 각각 단위벡터 i, j, k가 뻗어 있다고 가정할 때, 해당 좌표계상의 임의의 점을 가리키는 위치벡터는 a는 다음과 같이 나타낼 수 있다.
a = a(x) + a(y) + a(z)
여기서 a(x), a(y), a(z)는 가각 i, j, k를 곱한 것이기 때문에 다음과 같이 나타낼 수 있다.
a = xi + yj + zk
이처럼 기하벡터를 이용해도 직교좌표계를 표현할 수 있고, 또 거꾸로 기하벡터를 좌표의 수벡터로서 나타낼 수 있어, 컴퓨터 상에서 단순한 배열 데이터로 처리할 수 있다. 또한, 여기서는 서로 직교하는 단위벡터 i, j, k를 이용해 3D 직교좌표계를 표현했지만, 직교하지 않는 단위 벡터를 여러 개 이용하면 사교좌표계를 표현할 수 있다.
단 서로 평행인 벡터로는 좌표계를 표현할 수 없다. 또한 3D 공간을 표현하고 싶은데, 세 개의 벡터가 모두 같은 평면에 있어도 좌표축으로 사용할 수 없다. 그 벡터들은 선형종속이라 불리며, 하나의 벡터를 다른 벡터의 합으로 표현할 수 있는 상태가 된다. 반면에 선형종속이 아닌 상태를 선형독립이라고 한다.
선형독립이고 좌표계 표현에 사용할 수 있는 벡터(앞에 예에서는 i, j, k)를 가리켜 기저벡터라하고 그 집합을 기저라 부른다.벡터가 만족하는 덧셈과 스칼라 곱이 잘 정의된 벡터공간이라는 집합에서는 좌표계를 나타내는 기저를 구성하는 기저벡터의 개수를 차원이라 부른다.
법선벡터
법선벡터는 2D인 경우에는 어떤 벡터에 수직인 벡터이고, 3D인 경우에는 어떤 평면에 수직인 벡터다. 법선이라는 개념 자체는 벡터에 국한되지 않고, 수직인 직선을 의미한다. 이 같은 법선벡터는 3D 컴퓨터 그래픽스에서는 매우 응용 범위가 넓으면 다양한 장면에서 사용한다. 벡터 v를 그 시점이 속한 면에 수직인 벡터와 그 면상의 벡터로 분해했을 때, 수직인 벡터를 가리켜 v의 법선성분이라고 하고, 면상의 벡터를 v의 접선성분이라고 한다. 법선벡터는 평면을 정의하는데도 사용할 수 있는데, 점 P와 P를 시점으로 하는 법선벡터 N이 있을 때 P를 포함하는 평면의 표면이 어느 쪽을 향하는지 결정할 수 있다.
크기
벡터 v의 크기는 절댓값 기호와 같은 기호를 사용해 스칼라양과 마찬가지로 | v |로 표기하는 방식과 벡터의 크기를 노름이라 부르고 || v ||로 표기하는 방식이 있다.
좌표축을 사용하면, 위치벡터의 좌표에 표시되는 각 성분의 수치를 피타고라스의 정리에 적용해 벡터의 크기를 구할 수 있다.
3D 벡터 v 역시 마찬가지로 다음과 같이 구한다.
단 이렇게 벡터의 크기를 구하려면 제곱근 연산이 필요한데 컴퓨터 상의 제곱근 연산은 실행 비용이 많이 들어, 그러므로 두 개 벡터의 크기만 비교하고 싶을 때는 제곱근을 구할 것까지 없이, 벡터의 크기를 제곱한 값끼리 비교하는 것으로 충분하다. 유니티에서는 sqrMagnitude 함수로 벡터 크기의 제곱을 나타낼 수 있다.
내적
내적은 두 개의 벡터를 하나의 스칼라양으로 변환하는 연산이다. 벡터 a와 벡터 b의 내적은 수식상으로 도트 연산자를 아용해 a · b로 표기한다. 내적이 추가된 벡터 공간은 내적공간이라고 한다.
내적이라는 연산이 어떤 사양을 만족해야 벡터를 다루는 도구로서 바람직한지 예를 들어보면, 다음 식처럼 벡터 자신의 내적은 해당 벡터 크기를 제곱한 스칼라양이 다음과 같다고 가정한다.
a · a = ||a||^2
여기서, 삼각형 내각 θ를 이루는 두 변에 해당하는 벡터를 각각 a, b라고 하고, 나머지 한 변을 벡터 c라고 할 때, 다음과 같이 식이 성립된다.
c = a - b
이 사실을 전제로 하고, 내적이라는 연산에서 분배, 교환법칙이 성립한다고 가정하여, c와 c의 내적의 식을 전개해보면 다음과 같다.
c · c = (a - b) · (a - b)
= a · (a - b) - b · (a - b)
= a · a - a · b - b · a + b · b
= a · a + b · b - 2a · b
= ||a||^2 + ||b||^2 -2a · b
또한, 맨 처음 설정했던 것처럼 c · c = ||c||^2이므로 다음 식이 성립된다.
||c||^2 = ||a||^2 + ||b||^2 - 2a · b
코사인법칙을 이 삼각형에 적용해보자.
||c||^2 = ||a||^2 + ||b||^2 - 2||a|| ||b|| cosθ
이들 두 식은 모두 ||c||^2를 표현하므로, 우변끼리 같아져 다음 식이 성립한다.
||a||^2 + ||b||^2 - 2a · b = ||a||^2 + ||b||^2 - 2||a|| ||b|| cosθ
이 방정식을 풀면 최종적으로 다음 식을 얻을 수 있다.
a · b = ||a|| ||b|| cosθ
θ가 0일 때, cosθ = 1이므로, 벡터 자신과의 내적은 벡터 크기의 제곱과 같다고(a · a == ||a||^2)고 처음에 설정한 성질도 이 식으로 표현할 수 있다. 또한 a가 b에 수직일 때, cosθ = 0이므로, a · b = 0이다.
나아가, 2D에서 원점 O를 기준으로 한 위치벡터로서 a와 b를 생각하고 a의 성분 혹은 점A의 좌표를 (a{x}, b{y})로 하여 이들 좌표와 내적 관계를 구할 수 있다.
||c||^2 = ||a||^2+ ||b||^2 - 2a · b
여기서 피타고라스의 정리를 사용하면, c는 직각삼각형의 빗변에 해당하므로 다음 식이 성립한다.
||c||^2 = (a(x) - b(x))^2 + (a(y) - b(y))^2
마찬가지로 다음 식이 성립한다.
||a||^2 = a(x)^2 + a(y)^2
||b||^2 = b(x)^2 + b(y)^2
따라서 다음과 같이 만들어진다.
(a(x) - b(x))^2 + (a(y) - b(y))^2 = a(x)^2 + a(y)^2 + b(x)^2 + b(y)^2 - 2a · b
이 식을 전개하면 다음과 같은 식을 얻을 수 있다.
a · b = a(x)b(x) + a(y)b(y)
한편, 3D 벡터라면 (a(x),a(y),a(z))와 (b(x),b(y),b(z))에 대해 똑같이 계산해서 다음처럼 내적의 성분표시를 얻을 수 있다.
a · b = a(x)b(x) + a(y)b(y) + a(z)b(z)
사인과 코사인으로 대표되는 초월함수라 불리는 종류의 함수는 일반적으로 컴퓨터상에서 처리비용이 비싸므로, 내적을 계산으로 구할 때는 가능한 한이 성분표시를 사용해야 한다.
내적에는 교환법칙과 분배법칙이 성립하고, 스칼라 상수를 곱할 수 있다. 벡터 a, b, c와 스칼라 상수 n을 사용하면 다음 식이 성립한다.
a · b = b · a
(a + b) · c = a · c + b · c
(na)