Programming

    3차원 회전 행렬 구하기 by 오일러각 Input

    고등학생때 2차원 회전 행렬을 응용해서 풀어야 했던 문제가 있었던게 어렴풋이 기억이 난다. 2차원 회전 행렬은 특정 각만큼 회전시켰을때 기존 좌표를 삼각함수로 연산하여 회전된 좌표를 구한 식을 행렬로 표현한 것이라고 할 수 있다. 이와 약간은 다르게 3차원 회전 행렬은 축기준으로 회전을 하게 된다. X축을 기준으로 회전하면, X값은 변치 않고 Y,Z값만 수정되며, Y축을 기준으로 회전하면, Y값은 변치 않고 X,Z값만 수정되며, Z축을 기준으로 회전하면 Z값은 변치 않고 X,Y값만 수정된다. 이때 중요한 점은 특정 축을 기준으로 회전하기에, 수정되는 좌표는 어디까지나 2개의 좌표이므로, 2차원 회전 행렬 개념을 그대로 적용해서 연산을 수행한다고 볼 수 있다. 또한 최종 연산 결과가 여러 축을 기준으로 회..

    선형 변환(Linear Transformation)과 행렬(Matrix)의 관계

    선형 변환(Linear Transform)은 벡터 공간에서 벡터 공간으로 가는 함수로, 그것들 중 벡터 공간의 성질을 보존하는, 선형성을 갖는 함수이다. 행렬과의 관계를 따져볼때, 선형대수학의 기본정리를 보면 행렬과 선형 변환은 본질적으로 같다는 것을 증명하며, 기능이 완전히 같아 선형 변환은 행렬로 표현해 계산할 수 있다. 즉 벡터 공간에서 벡터 공간으로 가는 선형 연산자는 행렬과 일대일 대응(벡터 공간에는 기저가 존재하고, 선형 변환이 주어지면 그것을 기저에 맞춰 행렬로 표현할 수 있음)이기에, 둘은 본질적으로 같다고 볼 수 있다.

    C++ push_back, emplace_back in std::vector

    1. push_back std::vector의 멤버 함수인 push_back은 vector의 끝에 요소를 추가할때 사용한다. 종류는 Move Semantics(R-Value)개념이 추가되서 총 2개이다. void push_back(const T& value); // C++ 03 ~ - 값 복사를 통해 요소를 추가 void push_back (T&& value); // C++ 11 ~ - (임시) 객체의 복사가 아닌 이동을 통해 요소를 추가 C++ 11에서 추가된 push_back이 불필요한 오버헤드를 줄였다. 2. emplace_back push_back과 마찬가지로 std::vector의 멤버함수로 기능인 vector의 요소 끝에 원소를 추가하는 함수이다. template ..

    C++ PreCompiled Header

    Precompiled Header? Precompiled Header는 번역해보면 사전 컴파일 된 헤더라는 뜻이 된다. 의미와 비슷하게 컴파일 시간을 줄이기 위해 차후 개발에 변경 여지가 크게 없는 소스를 미리 컴파일 해두고 컴파일 결과를 저장해 컴파일시 해당 소스의 컴파일을 생략하는 것을 말한다. ​ 개발중인 프로젝트가 커지면 커질수록 컴파일 속도가 점차 느려진다. 커질수록 느려지는 컴파일 속도에 개선점중에는 여러가지가 있다. 대표적으로 1. Precompiled Header 2. 병렬 빌드 (회사에서 많이 사용) 3. 모듈화 혹은 모듈을 dll화 4. 하드웨어 업그레이드...ㅎㅎ 5. 코드 개선 ex) 올바른 inline, template, static 사용 5가지중 가장 Precompiled Hea..