벡터 조합
벡터 조합은 주어진 벡터들을 이용해 새로운 벡터를 생성하는 과정이다.
예를 들어, 을 벡터 과 을 이용하여 다음과 같이 만들 수 있다.
(6,7)=6⋅(1,0)+7⋅(0,1)
벡터를 조합하는 방법은 여러 가지가 있지만, 모든 조합이 가능한 것은 아니다.
선형 의존과 선형 독립
선형 독립 (Linearly Independent): 한 벡터를 다른 벡터들의 조합으로 나타낼 수 없을 때.
선형 의존 (Linearly Dependent): 한 벡터가 다른 벡터의 배수로 표현될 때.
선형 독립 예제
벡터 과 의 선형 독립 여부를 확인하기 위해 다음 방정식을 푼다.
(6,7)=a(2,1)+b(1,3) 이를 연립방정식으로 변환하면:
6=2a+b
7=a+3b
해를 구하면 로 유일한 해가 존재하므로, 두 벡터는 선형 독립이다.
선형 의존 예제
벡터 와 는 다음과 같은 관계가 성립한다.
(2,4)=2⋅(1,2) 따라서, 이 두 벡터는 선형 의존이다. 이는 벡터들이 같은 방향을 가리킨다는 것을 의미한다.
기저(Basis): 벡터 공간의 모든 벡터를 생성할 수 있는 최소한의 선형 독립 벡터 집합.
차원(Dimension): 벡터 공간을 이루는 기저 벡터의 개수.
2D 평면에서의 기저 예시
표준 기저(Standard Basis)
벡터 과
가장 기본적인 기저로, 모든 2D 벡터는 이 기저의 조합으로 표현 가능.
다른 기저의 예
벡터 과 가 선형 독립이라면, 이들도 기저가 될 수 있다.
함수(Function)는 입력을 받아 일정한 규칙에 따라 출력을 반환하는 대응 관계이다.
보통 형태로 표현하며, 예를 들어 일 때:
함수의 주요 개념
정의역(Domain): 함수가 적용될 수 있는 입력 값의 범위.
공역(Codomain): 함수의 출력이 포함될 수 있는 값들의 집합.
치역(Range): 함수가 실제로 생성하는 출력 값들의 집합 (공역의 부분집합).
단사, 전사, 전단사
단사(Injective): 서로 다른 입력이 항상 서로 다른 출력을 갖는 함수.
전사(Surjective): 공역의 모든 값이 적어도 하나의 정의역 원소에 대응하는 함수.
전단사(Bijective): 단사이면서 전사인 함수 (즉, 모든 입력이 유일한 출력을 가짐).
역함수 (Inverse Function)
함수 의 역함수 는 원래 함수의 출력을 입력으로 받아 원래의 입력을 반환하는 함수이다.
예제:
어떤 함수 가 다음 두 조건을 만족하면 선형성(Linear Property)을 갖는다.
가산성(Additivity):
f(x+y)=f(x)+f(y)
1차 동차성(Homogeneity):
f(ax)=af(x)
선형 함수 vs 일차 함수
선형 함수 (Strictly Linear Function): (절편 )
일차 함수 (Affine Function): (일반적인 일차 함수)
선형성의 엄격한 정의에 따르면, 일차 함수는 선형 함수가 아니다.
예제
선형 함수:
→ 선형성 만족!
일차 함수:
→ 가산성이 깨지므로 선형이 아님!
#include <iostream>
#include <algorithm> // std::max 사용
float ClampHealth(float health) {
return std::max(0.0f, health);
}
int main() {
float playerHealth = -10.0f;
playerHealth = ClampHealth(playerHealth);
std::cout << "Player Health: " << playerHealth << "\n"; // 0 출력
return 0;
}
ClampHealth 함수는 정의역을 제한하여 논리적 오류를 방지한다.
#include <iostream>
struct Vector2 {
float x, y;
Vector2 LerpTo(const Vector2& target, float t) const {
return {
(1 - t) * x + t * target.x,
(1 - t) * y + t * target.y
};
}
void Print() const {
std::cout << "Position: (" << x << ", " << y << ")\n";
}
};
int main() {
Vector2 start = {0.0f, 0.0f};
Vector2 end = {10.0f, 5.0f};
for (float t = 0.0f; t <= 1.0f; t += 0.2f) {
Vector2 interpolated = start.LerpTo(end, t);
interpolated.Print();
}
return 0;
}
결과
Position: (0.0, 0.0)
Position: (2.0, 1.0)
Position: (4.0, 2.0)
Position: (6.0, 3.0)
Position: (8.0, 4.0)
Position: (10.0, 5.0)
게임 캐릭터의 이동, 애니메이션, 카메라 전환 등에 활용됨.
벡터 조합과 선형 독립 개념을 통해, 특정 벡터로 원하는 위치를 만들 수 있는지 확인하는 방법을 배웠다.
함수의 개념과 선형성이 수학적으로 어떻게 정의되는지 학습했다.
선형 보간(Lerp)이 게임에서 캐릭터 움직임 및 애니메이션에 어떻게 활용되는지 이해했다.