행렬 0x06: 선형결합 (Linear combination)

선형결합 (Linear combination)

여러개의 벡터’들’이 주어지고 각각의 계수(혹은 가중치)가 주어질 때, 각 계수를 각 벡터에 스칼라 곱으로 곱해주고, 모든 벡터들을 더해 하나의 벡터를 만드는 것을 선형결합이라고 한다.

\[v = au + bw + ...\]

각 벡터($ 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;
}

Categories:

Updated:

Leave a comment