주요 내용
벡터 수학
벡터의 덧셈은 단지 첫 번째 단계에 불과합니다. 벡터의 연산에는 여러 종류가 있습니다. 다음은 ProcessingJS의
PVector
객체 함수가 지원하는 연산의 목록입니다. 이제부터 이 중 중요한 몇 가지를 먼저 살펴보겠습니다. 이후에 나올 예제들은 조금씩 더 복잡해지는 만큼 다른 함수들은 그때 더 자세히 배워보겠습니다. add()
— 벡터 덧셈sub()
— 벡터 뺄셈mult()
— 벡터의 실수곱셈div()
— 벡터의 실수나눗셈mag()
— 벡터 크기를 계산함normalize()
— 벡터를 정규화하여 단위 길이를 1로 만들어줌limit()
— 벡터의 크기를 제한함heading2D()
— 2차원에서 벡터의 방향을 각도로 나타냄dist()
— 두 벡터(점으로 간주)간 유클리디안 거리를 계산함angleBetween()
— 두 벡터간 각도를 계산함dot()
— 두 벡터의 내적을 계산함cross()
— 두 벡터의 외적을 계산함 (3차원에서만 가능)
이미 덧셈은 살펴보았으므로 뺄셈부터 시작하겠습니다. 뺄셈은 그렇게 어렵지는 않습니다. 단지 + 기호를 - 기호로 바꿔주면 됩니다.
벡터 뺄셈
위 식은 다음과 같이 나타낼 수 있습니다.
그리고
PVector
내부 함수는 다음과 같습니다:PVector.prototype.sub = function(vector2) {
this.x = this.x - vector2.x;
this.y = this.y - vector2.y;
};
다음은 벡터의 뺄셈을 응용한 예제로 마우스 위치와 화면의 중심 두 점 사이에 선을 표시하고 있습니다.
벡터의 기본적인 성질
수학에서 실수는 다음과 같은 기본적인 법칙을 따릅니다.
교환법칙:
결합법칙:
벡터에서도 위와 같은 법칙이 똑같이 적용됩니다:
교환법칙:
결합법칙:
벡터 곱셈
이제 벡터의 곱셈으로 넘어가 봅시다. 여기서는 생각을 조금 다르게 해야합니다. 벡터를 실수와 곱해주는 것은 (또는 실수배) 벡터의 크기를 배로 늘리거나 줄이는 것을 의미합니다. 어떤 벡터의 크기를 두 배로 만들거나 세 배 줄이고 싶다면 "벡터에 2를 곱해준다", "벡터에 1/3을 곱해준다" 와 같이 표현할 수 있습니다. 여기서 주의해야할 점은 벡터를 또 다른 벡터가 아닌 스칼라, 즉 실수로 곱해주는 것입니다.
벡터의 크기를 배로 늘리거나 줄이려면 각 성분 (x 와 y) 각각에 스칼라를 곱합니다.
이는 다음과 같이 나타낼 수 있습니다:
벡터표기법 예제 하나를 살펴봅시다.
따라서
PVector
객체 내의 함수는 다음과 같습니다:PVector.prototype.mult = function(n) {
this.x = this.x * n;
this.y = this.y * n;
}
mult
메소드를 코드에 응용하는 법은 다음과 같이 매우 간단합니다:var u = new PVector(-3,7);
// 이 PVector 객체는 이제 크기가 3배이고 (-9,21)과 같습니다
u.mult(3);
다음은 위의 예제와 같지만 벡터에 0.5를 곱해주었으므로 직선의 크기가 반으로 줄었습니다.
바로 위 예제처럼 벡터에 0.5를 곱하는 방법 대신, 2로 나눠주는 방법도 있습니다. 벡터의 나눗셈은 곱셈과 같은 방식입니다. 단순히 곱셈 기호 (별표: *)를 나눈셈 기호 (사선: /) 으로 바꿔주면 됩니다.
div 메소드는 내부에서 다음과 같이 구현됩니다:
PVector.prototype.div = function(n) {
this.x = this.x / n;
this.y = this.y / n;
}
그리고 다음은 코드에서 응용한 예제입니다:
var u = new PVector(8, -4);
u.div(2);
벡터의 성질
덧셈 법칙과 마찬가지로 수학에서 쓰이는 기본적인 곱셈 법칙들이 벡터에 동일하게 적용됩니다.
결합법칙:
벡터 한 개와 스칼라 두 개의 분배법칙:
분배법칙 ( : 스칼라, , : 벡터):
벡터 연산을 연습하고 싶으세요? 여기서 더 배울수 있습니다: 선형대수학: 벡터
본 "내추럴 시뮬레이션" 과정은 다니엘 쉬프만(Daniel Shiffman)이 저술한 "The Nature of Code"의 내용을 차용한 것이며, 본 내용물의 저작권은 Creative Commons Attribution-NonCommercial 3.0 Unported License를 적용합니다.