행렬 0x06: 선형결합 (Linear combination)
선형결합 (Linear combination)
여러개의 벡터’들’이 주어지고 각각의 계수(혹은 가중치)가 주어질 때, 각 계수를 각 벡터에 스칼라 곱으로 곱해주고, 모든 벡터들을 더해 하나의 벡터를 만드는 것을 선형결합
이라고 한다.
각 벡터($ u, v $)에 계수(가중치, $a, b$)를 곱해서 새로운 벡터를 만든다.
컴퓨터 그래픽스에서 선형결합이 필요한 상황은 다음과 같다.
-
변환 회전, 확대/축소, 이동 등의 변환을 표현하는데 사용될 수 있다.
-
쉐이딩 조명의 영향을 받는 픽셀을 계산할 때, 여러개의 광원들에 가중치를 두고 선형결합으로 최종 색상을 결정할 수 있다.
C++ 구현
template <class K, u64 N>
struct Vector
{
K data[N];
static Vector LinearCombination(const std::vector<Vector>&,
const std::vector<K>&);
};
template<class K, u64 N>
Vector<K, N> Vector<K, N>::LinearCombination(const std::vector<Vector>& vectors,
const std::vector<K>& scalars)
{
assert(vectors.size() == scalars.size());
Vector<K, N> res = {};
for (u64 i = 0; i < vectors.size(); ++i)
{
res.Add(vectors[i] * scalars[i]);
}
return res;
}
Leave a comment