본문 바로가기

프로그래밍79

[STL] map map은 연관 컨테이너의 일종이다. 연관 컨테이너란 키(key)와 값(value)처럼 관련있는 데이터를 하나의 쌍으로 묶어 저장하는 컨테이너를 말한다. 키와 값을 이용한 연관 컨테이너는 요소들에 대한 빠른 접근을 제공해준다. 하지만 삽입되는 요소의 위치를 지정할 수는 없다. 이런 연관 컨테이너는 보통 균형 잡힌 이진 탐색 트리나 해시 테이블을 이용해서 구현한다. 종류로는 set, mulitset, map, multimap이 있으며 오늘 알아볼 것은 map이다. 맵은 키와 값의 쌍(pair)으로 데이터를 관리하는 연관 컨테이너이다. 그리고 요소를 삽입하면서 자동으로 정렬되기 때문에 검색 속도가 매우 빠르다. 맵에서 키는 유일해야 하므로, 키의 중복을 허용하지 않는다. 하나의 키에 하나의 값이 연결되는 구조.. 2023. 1. 17.
[STL] deque deque(double-ended queue)는 기존 STL vector의 단점을 보완하기 위해 만들어진 자료구조이다. vector는 동적 배열이다. 즉 배열이라는 의미다. 그 말인 즉슨, vector는 기존 배열이 가진 장점과 단점을 대부분 가지고 있다. 배열은 데이터가 입력이 되면 기존에 존재하던 데이터의 배열 끝에 새로운 데이터가 입력이 된다. 이는 vector에서 push_back이라는 함수를 보면 알 수 있다. 지울 때도 마찬가지로 뒤에서부터 자료를 삭제한다. pop_back이 그 함수이다. 그렇다면 왜 push_front나 pop_front는 없을까? 이는 간단하다. 배열의 구조는 순차적이기 때문이다. 가령 맨 앞의 데이터를 지우고자 한다면 vector에선 어떻게 작동을 할까? 위 vector.. 2023. 1. 16.
[Game] 충돌 (2) 객체의 축이 평행한 경우의 충돌은 단순하게 구현할 수 있다. 만약, 회전을 통해 객체의 축이 평행하지 않은 경우에는 어떻게 구현을 해야 할까? OBB 회전을 하게 되면 두 객체의 축이 평행하지 않게 된다. 이 경우에는 다음과 같은 과정이 이어진다. 1. 두 객체의 중점을 잇는 차이 벡터를 구한다. 2. 네 개의 축 중 하나의 축의 단위벡터와 차이 벡터를 내적하여 절댓값을 찾는다. (a) 3. a와 같은 방향을 가지는 단위벡터와, 객체의 중점에서부터 스케일값만큼 뻗어진 가로 벡터, 세로 벡터를 찾는다. (b) 4. a와 b 과정에서 나온 4개의 절댓값을 더한 값을 비교하여 a가 더 크다면 충돌하지 않은 것, b가 더 크다면 충돌한 것으로 판정한다. 5. 단, 이 과정을 총 네 번 반복하고 모두 만족해야 완.. 2023. 1. 16.
[Game] 충돌 특정 오브젝트가 다른 오브젝트와 충돌을 했을 때, 이를 어떻게 확인하면 좋을까? 우선 단순하게는 해당 객체의 좌표가 다른 객체의 좌표와 겹쳐졌을 때 반응을 일으키면 된다. 충돌을 판정하는 알고리즘의 종류는 몇 가지가 있다. 1) 픽셀 픽셀은 좌표이다. 때문에 특정 픽셀이 어떤 객체와 충돌하였는지를 판별하기 위해선 간단한 코드만 있다면 충분하다. bool IntersectRectCoord(Object rect, Vector2 pixel) { if(rect.GetWorldPos().x + Rect.scale.x * 0.5f < pixel.x && rect.GetWorldPos().x - Rect.scale.x * 0.5f < pixel.x && rect.GetWorldPos().y + Rect.scale.y.. 2023. 1. 13.