Inventory
-
(챕터 03) 이미지 파일을 사용하자(2)@ 16. 1 ~ 17. 1/게임프로그래밍의 정석 2014. 3. 1. 18:35
이미지의 높이와 폭을 읽어보자. 사양서에 따르면 dwHeight가 8바이트째부터 4바이트 dwWidth가 12바이트째부터 4바이트 그런게 맨 처음에 나온 dwMagic(4바이트) 크기를 더하면 최종 dwHeight가 12바이트째부터 4바이트 dwWidth가 16바이트째부터 4바이트가 원하는 값이 된다. char* fileImage; //여기에 DDS파일을 읽어왔다면.. unsigned height, width; height=*(reinterpret_cast(&fileImage[12])); width=*(reinterpret_cast(&fileImage[16])); char*를 강제로 unsigned*로 변환해서 unsigned를 추출하는데 그 이유는 DWORD가 unsigned이기 떄문이다. (DWORD..
-
AVL 이진트리(개념설명)@ 16. 1 ~ 17. 1/자료구조 2014. 2. 18. 21:53
이진 탐색트리가 자동으로 균형을 잡을 수 있도록 개선된것이 AVL 트리 균형인수 = 왼쪽 서브트리의 높이 - 오른쪽 서브트리의 높이 균형인수의 절댓값이 2이상인 경우에 균형을 잡기위해 트리의 재조정을 진행한다. LL회전 자식 노드 두개가 왼쪽으로 연이어 연결되어 부모의 균형인수가 2가 되는 것 3 2 1 이런경우를 말하고..LL회전을 거치면 2 1 3 이렇게 된다. 2를 중심으로 오른쪽으로 3이 돌면됨.. RR은 그와 반대로.. 3 2 1 RR회전을 거치면 2 3 1 이런식으로 된다. LR과 RL도 있는데 우선 LR의 경우 1 2 3 이런식을 말하고.. 우선 LR상태에서 한번의 회전으로 균형이 잡히는 LL이나 RR로 바꾼다 LR상태에서 RR회전을 하면 LL상태가 된다. 2, 3을 먼저 떼어서 RR회전을 ..
-
힙@ 16. 1 ~ 17. 1/자료구조 2014. 1. 28. 23:23
#include #include #define HEAP_LEN 100 using namespace std; typedef char HData; typedef int Priority; typedef int PriorityComp(HData d1, HData d2); typedef struct _help{ int numofData; HData heapArr[HEAP_LEN]; PriorityComp *comp; }Heap; void HeapInit(Heap *ph, PriorityComp pc){ ph->numofData=0; ph->comp=pc; } int HIsEmpty(Heap *ph){ if(ph->numofData==0) return 1; else return 0; } int GetParentID..
-
등고선 알고리즘@ 16. 1 ~ 17. 1/알고리고리즘 2013. 9. 19. 23:38
등고선 알고리즘이란? 길찾기 알고리즘의 한 종류로 도착점에 0이라는 숫자를 넣고 주변을 검사하여 벽이 아닌 인접한 블록에 1로 쓴다. 다시 1 주변을 검사하여 벽이 아닌 인접한 블록에 2를 쓰고,이런 식으로 출발점까지 가장 적은 수가 나오는 경로를 찾아가는 알고리즘이다. 이러한 방법이 마치 등고선을 그리는 방법과 비슷하여 등고선법이라고 한다. 구현방법 1. 각 셀을 -1로 초기화 한다. -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2. 도착점을 0으로 설정한다. -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 3. 도착점부터 각 셀에 순서대로 번호를 매긴다. -1 -1 4 -1 -1 3 -1 4 3 2 -1 -1 1 ..
-
항목4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자@ 16. 1 ~ 17. 1/Effective C++ 2013. 8. 25. 21:16
int x; 어떤 상황에서는 x의 값이 확실히 초기화되지만 또 다른 상황에서는 그것이 보장되지 않는다는 것입니다. 어떤 플랫폼의 경우에는 미초기화 객체를 읽기만 해도 프로그램이 서 버리기도 합니다. 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화하는 것이다. int x =0; const char *text="welcome to"; double d; cin >> d; //입력스트림에서 읽음으로써 초기화 수행 이런 부분을 제외하고 나면 c++ 초기화의 나머지 부분은 생성자로 귀결된다. 초기화를 하면서 대입과 초기화를 헷갈리지 않는 것이 가장 중요하다. 생성자에서 초기화는 멤버 초기화 리스트를 사용하는 것이며 그 외의것은 대입이 되고 있는 것이다. class Rational{ public: Ratio..
-
항목 20 : 값에 의한 전달 보다는 상수객체 참조자에 의한 전달방식을 택하는 편이 낫다@ 16. 1 ~ 17. 1/Effective C++ 2013. 8. 19. 22:06
기본적으로 C++는 함수로부터 객체를 전달받거나 함수에 객체를 전달할 때 값에 의한 전달(pass by value)방식을 사용한다. 특별히 다른 방식을 지정하지 않으면 함수 매개변수는 실제 인자의 사본을 통해 초기화되며, 어떤 함수를 호출한 쪽은 그 함수가 반환한 값의 사본을 돌려받는다. 이들 사본을 만들어내는 원천이 바로 복사생성자라고 한다. 그래서 값에 의한 전달이 고비용의 연산이 된다고 한다. 그래서 고비용을 없애기 위해 상수객체에 대한 참조자로 전달하게 만드는것이다. void 함수(매개변수 : const 객체명& a); 이렇게 하면 새로 만들어지는 객체 같은 것이 없다. 여기서 새겨둬야 할 부분은 매개변수 선언문에 있는 const이다. 원래의 값에 의한 전달이라면 void 함수(매개변수 : 객체명..