DGtal 1.4.0
Loading...
Searching...
No Matches
testCOBANaivePlaneComputer.cpp File Reference
#include <cstdlib>
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/kernel/CPointPredicate.h"
#include "DGtal/geometry/surfaces/CAdditivePrimitiveComputer.h"
#include "DGtal/geometry/surfaces/COBANaivePlaneComputer.h"
#include "DGtal/geometry/surfaces/COBAGenericNaivePlaneComputer.h"
Include dependency graph for testCOBANaivePlaneComputer.cpp:

Go to the source code of this file.

Functions

template<typename Integer >
Integer getRandomInteger (const Integer &first, const Integer &after_last)
 
template<typename Integer , typename NaivePlaneComputer >
bool checkPlane (Integer a, Integer b, Integer c, Integer d, int diameter, unsigned int nbtries)
 
template<typename Integer , typename GenericNaivePlaneComputer >
bool checkGenericPlane (Integer a, Integer b, Integer c, Integer d, int diameter, unsigned int nbtries)
 
template<typename Integer , typename NaivePlaneComputer >
bool checkPlanes (unsigned int nbplanes, int diameter, unsigned int nbtries)
 
bool testCOBANaivePlaneComputer ()
 
template<typename NaivePlaneComputer >
bool checkManyPlanes (unsigned int diameter, unsigned int nbplanes, unsigned int nbpoints)
 
template<typename NaivePlaneComputer >
unsigned int maxDiameter (unsigned int min, unsigned int max)
 
template<typename GenericNaivePlaneComputer >
bool checkExtendWithManyPoints (unsigned int diameter, unsigned int nbplanes, unsigned int nbpoints)
 
int main (int, char **)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Jacques-Olivier Lachaud (jacqu.nosp@m.es-o.nosp@m.livie.nosp@m.r.la.nosp@m.chaud.nosp@m.@uni.nosp@m.v-sav.nosp@m.oie..nosp@m.fr ) Laboratory of Mathematics (CNRS, UMR 5127), University of Savoie, France
Date
2012/03/05

Functions for testing class COBANaivePlaneComputer.

This file is part of the DGtal library.

Definition in file testCOBANaivePlaneComputer.cpp.

Function Documentation

◆ checkExtendWithManyPoints()

template<typename GenericNaivePlaneComputer >
bool checkExtendWithManyPoints ( unsigned int diameter,
unsigned int nbplanes,
unsigned int nbpoints )

Definition at line 407 of file testCOBANaivePlaneComputer.cpp.

410{
411 unsigned int nbok = 0;
412 unsigned int nb = 0;
413 typedef typename GenericNaivePlaneComputer::InternalInteger Integer;
414 typedef typename GenericNaivePlaneComputer::Point Point;
415 typedef typename Point::Coordinate PointInteger;
417
418 trace.beginBlock( "checkExtendWithManyPoints" );
419 for ( unsigned int j = 0; j < nbplanes; ++j )
420 {
421 Integer a = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
422 Integer b = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
423 Integer c = getRandomInteger<Integer>( (Integer) 1, (Integer) diameter / 2 );
424 Integer d = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
425 GenericNaivePlaneComputer plane;
426 Dimension axis;
427 if ( ( a >= b ) && ( a >= c ) ) axis = 0;
428 else if ( ( b >= a ) && ( b >= c ) ) axis = 1;
429 else axis = 2;
430 plane.init( diameter, 1, 1 );
431
432 std::vector<Point> pts;
433 for ( unsigned int i = 0; i < nbpoints; ++i )
434 {
435 Point p;
436 p[ 0 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
437 p[ 1 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
438 p[ 2 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
439 Integer x = (Integer) p[ 0 ];
440 Integer y = (Integer) p[ 1 ];
441 Integer z = (Integer) p[ 2 ];
442 switch( axis ) {
443 case 0: p[ 0 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - b * y - c * z, a ) ); break;
444 case 1: p[ 1 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - c * z, b ) ); break;
445 case 2: p[ 2 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - b * y, c ) ); break;
446 }
447 pts.push_back( p );
448 }
449 ++nb; nbok += plane.isExtendable( pts.begin(), pts.end() ); // should be ok
450 trace.info() << "(" << nbok << "/" << nb
451 << ") plane.isExtendable( pts.begin(), pts.end() )"
452 << std::endl;
453 Point & any0 = pts[ getRandomInteger<int>( 0, pts.size() ) ];
454 pts.push_back( any0 + Point(1,0,0) );
455 Point & any1 = pts[ getRandomInteger<int>( 0, pts.size() ) ];
456 pts.push_back( any1 + Point(0,1,0) );
457 Point & any2 = pts[ getRandomInteger<int>( 0, pts.size() ) ];
458 pts.push_back( any2 + Point(0,0,1) );
459 bool check = ! plane.isExtendable( pts.begin(), pts.end() ); // should not be ok
460 ++nb; nbok += check ? 1 : 0;
461 trace.info() << "(" << nbok << "/" << nb
462 << ") ! plane.isExtendable( pts.begin(), pts.end() )"
463 << std::endl;
464 if ( ! check )
465 trace.warning() << plane << " last=" << pts.back() << std::endl
466 << "a=" << a << " b=" << b << " c=" << c << " d=" << d << std::endl;
467 ++nb; nbok += plane.extend( pts.begin(), pts.end() - 3 ); // should be ok
468 trace.info() << "(" << nbok << "/" << nb
469 << ") plane.extend( pts.begin(), pts.end() - 3)"
470 << std::endl;
471 ++nb; nbok += ! plane.extend( pts.end() - 3, pts.end() ); // should not be ok
472 trace.info() << "(" << nbok << "/" << nb
473 << ") ! plane.extend( pts.end() - 3, pts.end() )"
474 << std::endl;
475 }
476 trace.endBlock();
477 return nb == nbok;
478}
Aim: This class gathers several types and methods to make computation with integers.
Integer ceilDiv(IntegerParamType na, IntegerParamType nb) const
void beginBlock(const std::string &keyword="")
std::ostream & warning()
std::ostream & info()
double endBlock()
DGtal::uint32_t Dimension
Definition Common.h:136
Trace trace
Definition Common.h:153
Aim: The traits class for all models of Cinteger.
Integer getRandomInteger(const Integer &first, const Integer &after_last)
MyPointD Point

References DGtal::Trace::beginBlock(), DGtal::IntegerComputer< TInteger >::ceilDiv(), DGtal::Trace::endBlock(), getRandomInteger(), DGtal::Trace::info(), DGtal::trace, and DGtal::Trace::warning().

Referenced by main().

◆ checkGenericPlane()

template<typename Integer , typename GenericNaivePlaneComputer >
bool checkGenericPlane ( Integer a,
Integer b,
Integer c,
Integer d,
int diameter,
unsigned int nbtries )

Checks the naive plane d <= ax+by+cz <= d + max(|a|,|b|,|c|)-1

Definition at line 158 of file testCOBANaivePlaneComputer.cpp.

160{
161 typedef typename GenericNaivePlaneComputer::Point Point;
162 typedef typename Point::Component PointInteger;
164 Integer absA = ic.abs( a );
165 Integer absB = ic.abs( b );
166 Integer absC = ic.abs( c );
167 Integer x, y, z;
168 Dimension axis;
169 if ( ( absA >= absB ) && ( absA >= absC ) )
170 axis = 0;
171 else if ( ( absB >= absA ) && ( absB >= absC ) )
172 axis = 1;
173 else
174 axis = 2;
175 Point p;
176 GenericNaivePlaneComputer plane;
177 plane.init( diameter, 1, 1 );
178 // Checks that points within the naive plane are correctly recognized.
179 unsigned int nb = 0;
180 unsigned int nbok = 0;
181 while ( nb != nbtries )
182 {
183 p[ 0 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
184 p[ 1 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
185 p[ 2 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
186 x = (Integer) p[ 0 ];
187 y = (Integer) p[ 1 ];
188 z = (Integer) p[ 2 ];
189 switch ( axis ) {
190 case 0: p[ 0 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - b * y - c * z, a ) ); break;
191 case 1: p[ 1 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - c * z, b ) ); break;
192 case 2: p[ 2 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - b * y, c ) ); break;
193 }
194 bool ok_ext = plane.isExtendable( p ); // should be ok
195 bool ok = plane.extend( p ); // should be ok
196 ++nb; nbok += ok_ext ? 1 : 0;
197 ++nb; nbok += ok ? 1 : 0;
198 if ( ! ok )
199 {
200 std::cerr << "[ERROR] p=" << p << " NOT IN plane=" << plane << std::endl;
201 break;
202 }
203 if ( ! ok_ext )
204 {
205 std::cerr << "[ERROR] p=" << p << " was NOT extendable IN plane=" << plane << std::endl;
206 break;
207 }
208 // else
209 // std::cerr << "[OK] p=" << p << " IN plane=" << plane << std::endl;
210 }
211
212 // Checks that points outside the naive plane are correctly recognized as outliers.
213 while ( nb != (nbtries * 11 ) / 10 )
214 {
215 p[ 0 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
216 p[ 1 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
217 p[ 2 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
218 x = (Integer) p[ 0 ];
219 y = (Integer) p[ 1 ];
220 z = (Integer) p[ 2 ];
221 switch ( axis ) {
222 case 0: p[ 0 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - b * y - c * z, a ) ); break;
223 case 1: p[ 1 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - c * z, b ) ); break;
224 case 2: p[ 2 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - b * y, c ) ); break;
225 }
226 PointInteger tmp = getRandomInteger<PointInteger>( 2, 5 )
227 * (2*getRandomInteger<PointInteger>( 0, 2 ) - 1 );
228 p[ axis ] += tmp;
229 bool ok_ext = ! plane.isExtendable( p ); // should *not* be ok
230 bool ok = ! plane.extend( p ); // should *not* be ok
231 ++nb; nbok += ok ? 1 : 0;
232 ++nb; nbok += ok_ext ? 1 : 0;
233 if ( ! ok )
234 {
235 std::cerr << "[ERROR] p=" << p << " IN plane=" << plane << std::endl;
236 break;
237 }
238 if ( ! ok_ext )
239 {
240 std::cerr << "[ERROR] p=" << p << " was extendable IN plane=" << plane << std::endl;
241 break;
242 }
243 // else
244 // std::cerr << "[OK] p=" << p << " IN plane=" << plane << std::endl;
245 }
246 std::cerr << "plane = " << plane << std::endl;
247 return nb == nbok;
248}
static Integer abs(IntegerParamType a)

References DGtal::IntegerComputer< TInteger >::abs(), DGtal::IntegerComputer< TInteger >::ceilDiv(), and getRandomInteger().

Referenced by testCOBANaivePlaneComputer().

◆ checkManyPlanes()

template<typename NaivePlaneComputer >
bool checkManyPlanes ( unsigned int diameter,
unsigned int nbplanes,
unsigned int nbpoints )

Definition at line 371 of file testCOBANaivePlaneComputer.cpp.

374{
375 unsigned int nbok = 0;
376 unsigned int nb = 0;
378 stringstream ss (stringstream::out);
379 ss << "Testing block: Diameter is " << diameter << ". Check " << nbplanes << " planes with " << nbpoints << " points each.";
380 trace.beginBlock ( ss.str() );
381 ++nb; nbok += checkPlanes<Integer,NaivePlaneComputer>( nbplanes, diameter, nbpoints ) ? 1 : 0;
382 trace.info() << "(" << nbok << "/" << nb
383 << ") checkPlanes<Integer,NaivePlaneComputer>()"
384 << std::endl;
385 trace.endBlock();
386 return nbok == nb;
387}
bool checkPlanes(unsigned int nbplanes, int diameter, unsigned int nbtries)

References DGtal::Trace::beginBlock(), checkPlanes(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main(), and maxDiameter().

◆ checkPlane()

template<typename Integer , typename NaivePlaneComputer >
bool checkPlane ( Integer a,
Integer b,
Integer c,
Integer d,
int diameter,
unsigned int nbtries )

Checks the naive plane d <= ax+by+cz <= d + max(|a|,|b|,|c|)-1

Definition at line 61 of file testCOBANaivePlaneComputer.cpp.

63{
64 typedef typename NaivePlaneComputer::Point Point;
65 typedef typename Point::Component PointInteger;
67 Integer absA = ic.abs( a );
68 Integer absB = ic.abs( b );
69 Integer absC = ic.abs( c );
70 Integer x, y, z;
71 Dimension axis;
72 if ( ( absA >= absB ) && ( absA >= absC ) )
73 axis = 0;
74 else if ( ( absB >= absA ) && ( absB >= absC ) )
75 axis = 1;
76 else
77 axis = 2;
78 Point p;
80 plane.init( axis, diameter, 1, 1 );
81 // Checks that points within the naive plane are correctly recognized.
82 unsigned int nb = 0;
83 unsigned int nbok = 0;
84 while ( nb != nbtries )
85 {
86 p[ 0 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
87 p[ 1 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
88 p[ 2 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
89 x = (Integer) p[ 0 ];
90 y = (Integer) p[ 1 ];
91 z = (Integer) p[ 2 ];
92 switch ( axis ) {
93 case 0: p[ 0 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - b * y - c * z, a ) ); break;
94 case 1: p[ 1 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - c * z, b ) ); break;
95 case 2: p[ 2 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - b * y, c ) ); break;
96 }
97 bool ok_ext = plane.isExtendable( p ); // should be ok
98 bool ok = plane.extend( p ); // should be ok
99 ++nb; nbok += ok_ext ? 1 : 0;
100 ++nb; nbok += ok ? 1 : 0;
101 if ( ! ok )
102 {
103 std::cerr << "[ERROR] p=" << p << " NOT IN plane=" << plane << std::endl;
104 break;
105 }
106 if ( ! ok_ext )
107 {
108 std::cerr << "[ERROR] p=" << p << " was NOT extendable IN plane=" << plane << std::endl;
109 break;
110 }
111 // else
112 // std::cerr << "[OK] p=" << p << " IN plane=" << plane << std::endl;
113 }
114
115 // Checks that points outside the naive plane are correctly recognized as outliers.
116 while ( nb != (nbtries * 11 ) / 10 )
117 {
118 p[ 0 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
119 p[ 1 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
120 p[ 2 ] = getRandomInteger<PointInteger>( -diameter+1, diameter );
121 x = (Integer) p[ 0 ];
122 y = (Integer) p[ 1 ];
123 z = (Integer) p[ 2 ];
124 switch ( axis ) {
125 case 0: p[ 0 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - b * y - c * z, a ) ); break;
126 case 1: p[ 1 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - c * z, b ) ); break;
127 case 2: p[ 2 ] = NumberTraits<Integer>::castToInt64_t( ic.ceilDiv( d - a * x - b * y, c ) ); break;
128 }
129 PointInteger tmp = getRandomInteger<PointInteger>( 2, 5 )
130 * (2*getRandomInteger<PointInteger>( 0, 2 ) - 1 );
131 p[ axis ] += tmp;
132 bool ok_ext = ! plane.isExtendable( p ); // should *not* be ok
133 bool ok = ! plane.extend( p ); // should *not* be ok
134 ++nb; nbok += ok ? 1 : 0;
135 ++nb; nbok += ok_ext ? 1 : 0;
136 if ( ! ok )
137 {
138 std::cerr << "[ERROR] p=" << p << " IN plane=" << plane << std::endl;
139 break;
140 }
141 if ( ! ok_ext )
142 {
143 std::cerr << "[ERROR] p=" << p << " was extendable IN plane=" << plane << std::endl;
144 break;
145 }
146 // else
147 // std::cerr << "[OK] p=" << p << " IN plane=" << plane << std::endl;
148 }
149 return nb == nbok;
150}
void init(Dimension axis, InternalInteger diameter, InternalInteger widthNumerator=NumberTraits< InternalInteger >::ONE, InternalInteger widthDenominator=NumberTraits< InternalInteger >::ONE)
bool isExtendable(const Point &p) const
bool extend(const Point &p)

References DGtal::IntegerComputer< TInteger >::abs(), DGtal::IntegerComputer< TInteger >::ceilDiv(), DGtal::COBANaivePlaneComputer< TSpace, TInternalInteger >::extend(), getRandomInteger(), DGtal::COBANaivePlaneComputer< TSpace, TInternalInteger >::init(), and DGtal::COBANaivePlaneComputer< TSpace, TInternalInteger >::isExtendable().

Referenced by checkPlanes(), and testCOBANaivePlaneComputer().

◆ checkPlanes()

template<typename Integer , typename NaivePlaneComputer >
bool checkPlanes ( unsigned int nbplanes,
int diameter,
unsigned int nbtries )

Definition at line 253 of file testCOBANaivePlaneComputer.cpp.

254{
255 //using namespace Z3i;
256 //typedef COBANaivePlaneComputer<Z3, Integer> NaivePlaneComputer;
257 unsigned int nb = 0;
258 unsigned int nbok = 0;
259 for ( unsigned int nbp = 0; nbp < nbplanes; ++nbp )
260 {
261 Integer a = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
262 Integer b = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
263 Integer c = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
264 Integer d = getRandomInteger<Integer>( (Integer) 0, (Integer) diameter / 2 );
265 if ( ( a != 0 ) || ( b != 0 ) || ( c != 0 ) )
266 {
267 ++nb; nbok += checkPlane<Integer, NaivePlaneComputer>( a, b, c, d, diameter, nbtries ) ? 1 : 0;
268 if ( nb != nbok )
269 {
270 std::cerr << "[ERROR] for plane " << a << " * x + "
271 << b << " * y + " << c << " * z = " << d << std::endl;
272 break;
273 }
274 }
275 }
276 return nb == nbok;
277}
bool checkPlane(Integer a, Integer b, Integer c, Integer d, int diameter, unsigned int nbtries)

References checkPlane(), and getRandomInteger().

Referenced by checkManyPlanes().

◆ getRandomInteger()

template<typename Integer >
Integer getRandomInteger ( const Integer & first,
const Integer & after_last )

Definition at line 50 of file testCOBANaivePlaneComputer.cpp.

51{
52 Integer r = (Integer) rand();
53 return ( r % (after_last - first) ) + first;
54}

Referenced by checkExtendWithManyPoints(), checkGenericPlane(), checkPlane(), and checkPlanes().

◆ main()

int main ( int ,
char **  )

Definition at line 483 of file testCOBANaivePlaneComputer.cpp.

484{
485 using namespace Z3i;
486
487 // Max diameter is ~20 for int32_t, ~500 for int64_t, any with BigInteger.
488 trace.beginBlock ( "Testing class COBANaivePlaneComputer" );
489 bool res = true
495
496 trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
497 trace.endBlock();
498 // trace.beginBlock ( "Max diameter for COBANaivePlaneComputer<Z3, int32_t>" );
499 // unsigned int maxd = maxDiameter<COBANaivePlaneComputer<Z3, DGtal::int32_t> >( 10, 1000 );
500 // trace.emphase() << maxd << endl;
501 // trace.endBlock();
502 // trace.beginBlock ( "Max diameter for COBANaivePlaneComputer<Z3, int64_t>" );
503 // unsigned int maxd2 = maxDiameter<COBANaivePlaneComputer<Z3, DGtal::int32_t> >( 100, 100000 );
504 // trace.emphase() << maxd2 << endl;
505 // trace.endBlock();
506 return res ? 0 : 1;
507}
Aim: A class that recognizes pieces of digital planes of given axis width. When the width is 1,...
std::ostream & emphase()
bool checkExtendWithManyPoints(unsigned int diameter, unsigned int nbplanes, unsigned int nbpoints)
bool testCOBANaivePlaneComputer()
bool checkManyPlanes(unsigned int diameter, unsigned int nbplanes, unsigned int nbpoints)

References DGtal::Trace::beginBlock(), checkExtendWithManyPoints(), checkManyPlanes(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), testCOBANaivePlaneComputer(), and DGtal::trace.

◆ maxDiameter()

template<typename NaivePlaneComputer >
unsigned int maxDiameter ( unsigned int min,
unsigned int max )

NB (JOL): Unreliable.

Definition at line 393 of file testCOBANaivePlaneComputer.cpp.

394{
395 while ( min < max )
396 {
397 unsigned int middle = (min+max)/2;
398 bool ok = checkManyPlanes<NaivePlaneComputer>( middle, 2, 2000 );
399 if ( ok ) min = middle+1;
400 else max = middle;
401 }
402 return min-1;
403}
int max(int a, int b)

References checkManyPlanes(), and max().

◆ testCOBANaivePlaneComputer()

bool testCOBANaivePlaneComputer ( )

Example of a test. To be completed.

Definition at line 283 of file testCOBANaivePlaneComputer.cpp.

284{
285 unsigned int nbok = 0;
286 unsigned int nb = 0;
287 using namespace Z3i;
289 typedef COBAGenericNaivePlaneComputer<Z3, BigInteger> GenericNaivePlaneComputer;
290
291 BOOST_CONCEPT_ASSERT(( CAdditivePrimitiveComputer< NaivePlaneComputer > ));
293 BOOST_CONCEPT_ASSERT(( boost::ForwardContainer< NaivePlaneComputer > ));
295 BOOST_CONCEPT_ASSERT(( CPointPredicate< NaivePlaneComputer::Primitive > ));
297
298 trace.beginBlock ( "Testing block: COBANaivePlaneComputer instantiation." );
299 NaivePlaneComputer plane;
300 Point pt0( 0, 0, 0 );
301 plane.init( 2, 100, 3, 2 );
302 bool pt0_inside = plane.extend( pt0 );
303 FATAL_ERROR(pt0_inside);
304
305 trace.info() << "(" << nbok << "/" << nb << ") Plane=" << plane
306 << std::endl;
307 Point pt1( Point( 8, 1, 3 ) );
308 bool pt1_inside = plane.extend( pt1 );
309 ++nb; nbok += pt1_inside == true ? 1 : 0;
310 trace.info() << "(" << nbok << "/" << nb << ") add " << pt1
311 << " Plane=" << plane << std::endl;
312 Point pt2( Point( 2, 7, 1 ) );
313 bool pt2_inside = plane.extend( pt2 );
314 ++nb; nbok += pt2_inside == true ? 1 : 0;
315 trace.info() << "(" << nbok << "/" << nb << ") add " << pt2
316 << " Plane=" << plane << std::endl;
317
318 Point pt3( Point( 0, 5, 17 ) );
319 bool pt3_inside = plane.extend( pt3 );
320 ++nb; nbok += pt3_inside == false ? 1 : 0;
321 trace.info() << "(" << nbok << "/" << nb << ") add " << pt3
322 << " Plane=" << plane << std::endl;
323
324 Point pt4( Point( -10, -10, 10 ) );
325 bool pt4_inside = plane.extend( pt4 );
326 ++nb; nbok += pt4_inside == false ? 1 : 0;
327 trace.info() << "(" << nbok << "/" << nb << ") add " << pt4
328 << " Plane=" << plane << std::endl;
329
330 Point pt5 = pt0 + pt1 + pt2 + Point( 0, 0, 2 );
331 bool pt5_inside = plane.extend( pt5 );
332 ++nb; nbok += pt5_inside == true ? 1 : 0;
333 trace.info() << "(" << nbok << "/" << nb << ") add " << pt5
334 << " Plane=" << plane << std::endl;
335
336 NaivePlaneComputer plane2;
337 plane2.init( 2, 100, 1, 1 );
338 plane2.extend( Point( 10, 0, 0 ) );
339 plane2.extend( Point( 0, 8, 0 ) );
340 plane2.extend( Point( 0, 0, 6 ) );
341 trace.info() << "(" << nbok << "/" << nb << ") "
342 << " Plane2=" << plane2 << std::endl;
343
344 ++nb; nbok += checkPlane<Integer,NaivePlaneComputer>( 11, 5, 19, 20, 100, 100 ) ? 1 : 0;
345 trace.info() << "(" << nbok << "/" << nb
346 << ") checkPlane<Integer,NaivePlaneComputer>( 11, 5, 19, 20, 100, 100 )"
347 << std::endl;
348
349 ++nb; nbok += checkGenericPlane<Integer,GenericNaivePlaneComputer>( 11, 5, 19, 20, 100, 100 ) ? 1 : 0;
350 trace.info() << "(" << nbok << "/" << nb
351 << ") checkGenericPlane<Integer,GenericNaivePlaneComputer>( 11, 5, 19, 20, 100, 100 )"
352 << std::endl;
353 ++nb; nbok += checkGenericPlane<Integer,GenericNaivePlaneComputer>( 17, 33, 7, 10, 100, 100 ) ? 1 : 0;
354 trace.info() << "(" << nbok << "/" << nb
355 << ") checkGenericPlane<Integer,GenericNaivePlaneComputer>( 17, 33, 7, 10, 100, 100 )"
356 << std::endl;
357 ++nb; nbok += checkPlane<Integer,NaivePlaneComputer>( 15, 8, 13, 15, 100, 100 ) ? 1 : 0;
358 trace.info() << "(" << nbok << "/" << nb
359 << ") checkPlane<Integer,NaivePlaneComputer>( 15, 8, 13, 15, 100, 100 )"
360 << std::endl;
361 ++nb; nbok += checkGenericPlane<Integer,GenericNaivePlaneComputer>( 15, 8, 13, 15, 100, 100 ) ? 1 : 0;
362 trace.info() << "(" << nbok << "/" << nb
363 << ") checkGenericPlane<Integer,GenericNaivePlaneComputer>( 15, 8, 13, 15, 100, 100 )"
364 << std::endl;
365 trace.endBlock();
366 return nbok == nb;
367}
COBANaivePlaneComputer< Z3, InternalInteger > NaivePlaneComputer
Aim: Defines the concept describing an object that computes some primitive from input points given gr...
Aim: Defines a predicate on a point.
Go to http://www.sgi.com/tech/stl/ForwardContainer.html.
Definition Boost.dox:110
bool checkGenericPlane(Integer a, Integer b, Integer c, Integer d, int diameter, unsigned int nbtries)

References DGtal::Trace::beginBlock(), checkGenericPlane(), checkPlane(), DGtal::Trace::endBlock(), DGtal::COBANaivePlaneComputer< TSpace, TInternalInteger >::extend(), DGtal::Trace::info(), DGtal::COBANaivePlaneComputer< TSpace, TInternalInteger >::init(), and DGtal::trace.

Referenced by main().