52 unsigned int nbok = 0;
56 typedef std::vector<Point> Container;
60 OrientationFunctor orientationFunctor;
62 predicate( orientationFunctor );
65 using namespace functions::Hull2D;
72 openGrahamScan( input.begin(), input.end(), back_inserter(
output ), predicate );
76 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
82 input.push_back(
Point(1,1) );
83 openGrahamScan( input.begin(), input.end(), back_inserter(
output ), predicate );
84 if ( (
output.size() == 1) &&
88 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
94 input.push_back(
Point(1,1) );
95 input.push_back(
Point(1,2) );
96 openGrahamScan( input.begin(), input.end(), back_inserter(
output ), predicate );
97 if ( (
output.size() == 2) &&
102 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
110 input.push_back(
Point(0,0) );
111 input.push_back(
Point(5,0) );
112 input.push_back(
Point(10,5) );
113 copy( input.begin(), input.end(), ostream_iterator<Point>( cout,
" " ) );
116 openGrahamScan( input.begin(), input.end(), back_inserter(
output ), predicate );
118 copy(
output.begin(),
output.end(), ostream_iterator<Point>( cout,
" " ) );
121 if ( (
output.size() == 3) &&
127 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
131 input.at(2) =
Point(10,-5);
132 copy( input.begin(), input.end(), ostream_iterator<Point>( cout,
" " ) );
135 openGrahamScan( input.begin(), input.end(), back_inserter(
output ), predicate );
137 copy(
output.begin(),
output.end(), ostream_iterator<Point>( cout,
" " ) );
140 if ( (
output.size() == 2) &&
145 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
148 trace.
info() <<
"several points" << endl;
151 input.push_back(
Point(0,5) );
152 input.push_back(
Point(0,0) );
153 input.push_back(
Point(1,1) );
154 input.push_back(
Point(2,4) );
155 input.push_back(
Point(3,9) );
156 input.push_back(
Point(4,16) );
157 input.push_back(
Point(5,0) );
159 openGrahamScan( (input.begin()+1), input.end(), back_inserter(
output ), predicate );
160 if ( (
output.size() == 2) &&
165 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
168 openGrahamScan( input.begin(), input.end(), back_inserter(
output ), predicate );
169 if ( (
output.size() == 3) &&
175 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
186 closedGrahamScanFromVertex( input.begin(), input.end(), back_inserter(
output ), predicate );
190 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
196 input.push_back(
Point(1,1) );
197 closedGrahamScanFromVertex( input.begin(), input.end(), back_inserter(
output ), predicate );
198 if ( (
output.size() == 1) &&
202 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
208 input.push_back(
Point(1,1) );
209 input.push_back(
Point(1,2) );
210 closedGrahamScanFromVertex( input.begin(), input.end(), back_inserter(
output ), predicate );
211 if ( (
output.size() == 2) &&
216 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
223 input.push_back(
Point(0,0) );
224 input.push_back(
Point(5,0) );
225 input.push_back(
Point(10,5) );
226 copy( input.begin(), input.end(), ostream_iterator<Point>( cout,
" " ) );
229 closedGrahamScanFromVertex( input.begin(), input.end(), back_inserter(
output ), predicate );
231 copy(
output.begin(),
output.end(), ostream_iterator<Point>( cout,
" " ) );
234 if ( (
output.size() == 3) &&
240 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
243 trace.
info() <<
"taking into account the first point" << endl;
246 input.push_back(
Point(0,-1) );
247 input.push_back(
Point(1,0) );
248 input.push_back(
Point(1,5) );
249 input.push_back(
Point(-5,5) );
250 input.push_back(
Point(-5,0) );
251 input.push_back(
Point(-2,1) );
252 copy( input.begin(), input.end(), ostream_iterator<Point>( cout,
" " ) );
255 closedGrahamScanFromVertex( input.begin(), input.end(), back_inserter(
output ), predicate );
257 copy(
output.begin(),
output.end(), ostream_iterator<Point>( cout,
" " ) );
260 if ( (
output.size() == 5) &&
268 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
278 closedGrahamScanFromAnyPoint( input.begin(), input.end(), back_inserter(
output ), predicate );
282 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
288 input.push_back(
Point(1,1) );
289 closedGrahamScanFromAnyPoint( input.begin(), input.end(), back_inserter(
output ), predicate );
290 if ( (
output.size() == 1) &&
294 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
300 input.push_back(
Point(1,1) );
301 input.push_back(
Point(1,2) );
302 closedGrahamScanFromAnyPoint( input.begin(), input.end(), back_inserter(
output ), predicate );
303 if ( (
output.size() == 2) &&
308 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
315 input.push_back(
Point(0,0) );
316 input.push_back(
Point(5,0) );
317 input.push_back(
Point(10,5) );
318 copy( input.begin(), input.end(), ostream_iterator<Point>( cout,
" " ) );
321 closedGrahamScanFromAnyPoint( input.begin(), input.end(), back_inserter(
output ), predicate );
323 copy(
output.begin(),
output.end(), ostream_iterator<Point>( cout,
" " ) );
326 if ( (
output.size() == 3) &&
332 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
335 trace.
info() <<
"taking into account the first point" << endl;
338 input.push_back(
Point(3,2) );
339 input.push_back(
Point(2,2) );
340 input.push_back(
Point(2,1) );
341 input.push_back(
Point(1,1) );
342 input.push_back(
Point(0,1) );
343 input.push_back(
Point(0,0) );
344 input.push_back(
Point(9,0) );
345 input.push_back(
Point(9,6) );
346 input.push_back(
Point(8,6) );
347 input.push_back(
Point(8,5) );
348 input.push_back(
Point(7,5) );
349 input.push_back(
Point(7,4) );
350 input.push_back(
Point(6,4) );
351 input.push_back(
Point(5,4) );
352 input.push_back(
Point(5,3) );
353 input.push_back(
Point(4,3) );
354 input.push_back(
Point(4,2) );
356 copy( input.begin(), input.end(), ostream_iterator<Point>( cout,
" " ) );
359 closedGrahamScanFromAnyPoint( input.begin(), input.end(), back_inserter(
output ), predicate );
361 copy(
output.begin(),
output.end(), ostream_iterator<Point>( cout,
" " ) );
364 if ( (
output.size() == 5) &&
372 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << endl;
AxisDomainSplitter< Domain >::SplitDomainsInfo output