4월, 2022의 게시물 표시
{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[코딩의탑] 2층: 포탈(Portal)

이미지
포탈이란 무엇인가요?   수많은 게임 팬들을 환호하게 만든 센세이셜한 게임이 있습니다: 바로 밸브 사의 포탈이죠. 포탈은 서로 다른 두 공간을 이어주는 문입니다. 플레이어는 포탈을 통과해 공간을 이동할 수 있고, 통과하지 않아도 맞은 편의 공간을 볼 수 있죠. 또한, 포탈을 통과할 때는 운동량이 보존됩니다. 공중에서 빠른 속도로 낙하하면서 땅바닥에 열려 있는 포탈을 통과하게 되면, 맞은편 포탈로 대포알처럼 튕겨나갈 수 있다는 것이죠! <Portal>   코딩의 탑 2층에서 우리는 이러한 포탈의 구현을 다루게 될 것입니다. 어떻게 해결할 수 있을까요?   우리는 다음 두 가지 작은 목표를 해결해나갈 것입니다. 임의의 좌표계의 벡터를, 다른 임의의 좌표계로 변환할 수 있습니다. 사원수(Quaternion)를 이용하여, 두 좌표계의 차이만큼 회전시킬 수 있습니다. 준비운동을 시작해 보자구요.. 기저   우리는 좌표 공간에 벡터를 표현하죠. 이 때의 축은 각각 x축, y축, z축이 됩니다. 사실 이 축들은 곧 기저 벡터입니다. 기저 벡터라 함은, 벡터 공간에서 임의의 벡터를 표현하는데 쓸 수 있는 벡터들입니다. 기저 벡터가 x축, y축, z축의 단위 벡터라면 이는 다음과 같이 표현해볼 수 있겠죠: x (1,0,0), y (0,1,0), z (0,0,1).   이 세 가지 벡터만 있다면, 3차원의 모든 벡터를 표현할 수 있습니다. 가령 (1,2,3)은 1* x +2* y +3* z 로 표현해볼 수 있습니다. 다음 그림을 참고해보세요:   재미있는 사실은 이러한 기저 벡터들은 우리가 원하는 대로 얼마든지 만들 수 있다는 것입니다. 심지어, 다른 기저 벡터의 표현으로도 변환해볼 수 있죠! 그러기 위해, 우리는 행렬식을 이용해 벡터의 표현을 일반화해볼 수 있습니다. 다음 그림을 참고해보세요: i, j, k는 각 기저의 성분이 되며, (x1, y1, z1), (x2, y2, z2), (x3, y3, z3)는 기저 벡터이고 크기가 1입니다. 벡터의 표현   우리는 포

[Troubleshooting] 테스트 프로젝트에서의 LNK2019, LNK1120 에러

설명   테스트 프로젝트에서 단위 테스트를 진행할 때, 같은 솔루션 내 프로젝트의 함수를 제대로 링킹하지 못하는 현상이 일어남: LNK2019, LNK1120.   해당 클래스가 존재하는 프로젝트 내에서는 같은 코드여도 링킹 에러가 일어나지 않고, 테스트 프로젝트에서만 해당 현상이 발생. 원인   테스트 클래스에서 외부 참조 클래스의 헤더 파일을 포함하나, 해당하는 목적 파일을 찾을 수 없음. 해결 링크 에러를 발생시키는 클래스의 헤더(.h)를 포함하는 것 대신 소스파일(.cpp)을 포함하는 것으로 해결할 수 있음. 허나 이는 별로 좋지 않은 해결이며, 테스트 프로젝트 빌드 속성에서 링커의 추가 의존에 목적 파일들이 있는 경로를 추가해주는 것으로 해결할 수 있음. 가령: $(SolutionDir)MyProjectName\$(IntDir)*.obj 혹은, 이러한 문제가 발생하는 근본적인 이유는 executable한 두 프로젝트가 서로 참조를 하는 과정에서 링크를 할 수 없다는 것에 있으므로 참조를 받는 프로젝트 쪽에서 *.lib 등으로 빌드를 하여 링크할 수 있도록 만들면 됨.

[C++] The C++ Programming Language: 3. A Tour of C++: Abstraction Mechanism (4)

3.4 Templates   벡터 자료형을 원하 누군가가 항상 double 값으로 된 벡터를 원하는 것은 아니죠. 벡터는 일반적인 개념이고, 부동소수점 수의 표기와는 독립적입니다. 결론적으로, 벡터 요소의 자료형은 이를 독립적으로 표현할 필요가 있죠. 템플릿(template) 은 자료형과 값의 집합으로 파라미터화하는 클래스 혹은 함수입니다. 우리는 double과 같은 특정한 인자로 특정한 자료형과 함수를 생성하기 위한 일반적인 것으로 가장 이해되기 좋은 개념을 표현하기 위해 템플릿을 사용합니다. 3.4.1 Parameterized Types   우리는 vector-of-double 자료형을 vector-of-anything 자료형으로 일반화할 수 있습니다. 템플릿과 특정한 자료형인 double을 인자로 재배치함으로써 말이죠. 예를 들면: 1 2 3 4 5 6 7 8 9 10 11 12 13 template < typename T > class  Vector { private :     T∗ elem;  // elem points to an array of sz elements of type T      int  sz; public :     Vector( int  s);  // constructor: establish invariant, acquire resources     ˜Vector() {  delete [] elem; }  // destructor: release resources      // ... copy and move operations ...     T &   operator []( int  i);      const  T &   operator []( int  i)  const ;      int  size()  const  {  return  sz; } }; Colored by Color Scripter cs   template<typename T> 접두어는 T를 뒤에 있는 선언의 파라미터로 만듭니다.