[STL] vector, set, iterator를 이용한 사각형 조각 나누기
작업을 하던 중 열심히 만든 코드를 공개합니다~
작업하던 내용은 한 이미지에 줄을 쭉쭉 그어서 조각내는 거였습니다. 그림과 같이 큰 사각형(이미지)이 하나 있고 내부에 선을 가로 또는 세로로 그어 놓은 후, 작은 사각형으로 나누는 것이죠. 입력은 l개의 x좌표와 t개의 y좌표입니다.
결과는 Rn((x1, y1), (x2, y2))의 두 꼭지점을 가진 Rectangle 형태가 되어야 합니다.
그림에서의 좌표를 각 x축과 y축으로 나누어서 표현한다면
set<l> = {0, l1, l2, l3, l4, le}
set<t> = {0, t1, t2, t3, te}
(le와 te는 큰 사각형의 오른쪽 하단 좌표)라고 볼 수 있습니다.
//--------------------------------------------------------------------------- #include <vcl.h> #include <stdio.h> #include <set> #include <vector> #include <algorithm> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------------------------- using namespace std; #pragma argsused int _tmain(int argc, _TCHAR* argv[]) { vector<int> vars_l; vector<int> vars_t; vars_l.push_back(12);vars_l.push_back(66);vars_l.push_back(48); vars_l.push_back(874);vars_l.push_back(0);vars_l.push_back(150); vars_t.push_back(487);vars_t.push_back(234);vars_t.push_back(124); vars_t.push_back(34);vars_t.push_back(0); set<int> set_l; set<int> set_t; set<TRect> set_rect; for(int i = 0; i < vars_l.size(); i++) { set_l.insert(vars_l.at(i)); } for(int j = 0; j < vars_t.size(); j++) { set_t.insert(vars_t.at(j)); } int l = 0; int t = 0; int r_index = 0; set<int>::iterator iter_t1 = set_t.begin(); set<int>::iterator iter_t2 = set_t.begin(); iter_t2++; while(iter_t2 != set_t.end()) { set<int>::iterator iter_l1 = set_l.begin(); set<int>::iterator iter_l2 = set_l.begin(); iter_l2++; while(iter_l2 != set_l.end()) { printf("\nR%d\t((%d, %d),\t(%d, %d))", r_index, *iter_l1, *iter_t1, *iter_l2, *iter_t2); iter_l1++; iter_l2++; l++; r_index++; } iter_t1++; iter_t2++; t++; } return 0; } //---------------------------------------------------------------------------
그래서 결과는 이렇게 나오죠.
R0 ((0, 0), (12, 34)) R1 ((12, 0), (48, 34)) R2 ((48, 0), (66, 34)) R3 ((66, 0), (150, 34)) R4 ((150, 0), (874, 34)) R5 ((0, 34), (12, 124)) R6 ((12, 34), (48, 124)) R7 ((48, 34), (66, 124)) R8 ((66, 34), (150, 124)) R9 ((150, 34), (874, 124)) R10 ((0, 124), (12, 234)) R11 ((12, 124), (48, 234)) R12 ((48, 124), (66, 234)) R13 ((66, 124), (150, 234)) R14 ((150, 124), (874, 234)) R15 ((0, 234), (12, 487)) R16 ((12, 234), (48, 487)) R17 ((48, 234), (66, 487)) R18 ((66, 234), (150, 487)) R19 ((150, 234), (874, 487))
컴파일러는 bcc를 사용했습니다. vcl.h요거만 봐도 딱 알 수 있지만.. ~_~

