35 #include "DGtal/base/Common.h"
36 #include "DGtal/helpers/StdDefs.h"
37 #include "DGtal/kernel/CPointPredicate.h"
38 #include "DGtal/geometry/surfaces/CAdditivePrimitiveComputer.h"
39 #include "DGtal/geometry/surfaces/ChordGenericStandardPlaneComputer.h"
43 using namespace DGtal;
51 template <
typename Integer>
55 return ( r % (after_last - first) ) + first;
58 template <
typename Domain>
69 std::vector<Point> pts;
70 Integer mup = mu + abs(a) + abs(b) + abs(c);
75 Integer r = a * p[ 0 ] + b * p[ 1 ] + c * p[ 2 ];
76 if ( ( mu <= r ) && ( r < mup ) )
82 template <
typename PlaneComputer >
84 ( PlaneComputer & computer,
unsigned int nbplanes,
int diameter )
91 unsigned int nbok = 0;
93 Point( diameter, diameter, diameter ) );
95 std::random_device rd;
98 for (
unsigned int p = 0; p < nbplanes; ++p )
105 while ( ( a == 0 ) && ( b == 0 ) && ( c == 0 ) );
108 computer.init( 1, 1 );
110 nbok += computer.extend( pts.begin(), pts.end() ) ? 1 : 0;
111 trace.
info() <<
"Primitive=" << computer.primitive() << std::endl;
112 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") extend "
113 << pts.size() <<
" points of plane "
114 << mu <<
" <= " << a <<
"*x+" << b <<
"*y+" << c <<
"*z+"
115 <<
" < " << (mu+a+b+c) << std::endl;
116 computer.init( 1, 1 );
117 std::shuffle( pts.begin(), pts.end(), g );
119 nbok += computer.extend( pts.begin(), pts.end() ) ? 1 : 0;
120 trace.
info() <<
"Primitive=" << computer.primitive() << std::endl;
121 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") extend "
122 << pts.size() <<
" shuffled points of plane "
123 << mu <<
" <= " << a <<
"*x+" << b <<
"*y+" << c <<
"*z+"
124 <<
" < " << (mu+a+b+c) << std::endl;
140 ok = plane.extend(
Point(0,0,0) );
141 trace.
info() <<
"Point(0,0,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
143 ok = plane.extend(
Point(1,0,0) );
144 trace.
info() <<
"Point(1,0,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
146 ok = plane.extend(
Point(0,1,0) );
147 trace.
info() <<
"Point(0,1,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
149 ok = plane.extend(
Point(1,1,0) );
150 trace.
info() <<
"Point(1,1,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
152 ok = plane.extend(
Point(2,0,0) );
153 trace.
info() <<
"Point(2,0,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
155 ok = plane.extend(
Point(0,2,0) );
156 trace.
info() <<
"Point(0,2,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
158 ok = plane.extend(
Point(0,2,0) );
159 trace.
info() <<
"Point(0,2,0) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
161 ok = plane.extend(
Point(1,1,1) );
162 trace.
info() <<
"Point(1,1,1) is " << ( ok ?
"ok" :
"ko" ) << std::endl;
Aim: A class that recognizes pieces of digital planes of given diagonal width. When the width is ,...
void init(InternalScalar widthNumerator=NumberTraits< InternalScalar >::ONE, InternalScalar widthDenominator=NumberTraits< InternalScalar >::ONE)
Iterator for HyperRectDomain.
const ConstIterator & end() const
const ConstIterator & begin() const
TInteger Integer
Arithmetic ring induced by (+,-,*) and Integer numbers.
Point::Coordinate Integer
MyDigitalSurface::ConstIterator ConstIterator
DGtal is the top-level namespace which contains all DGtal functions and types.
std::vector< typename Domain::Point > pointsInStandardPlane(const Domain &domain, typename Domain::Integer a, typename Domain::Integer b, typename Domain::Integer c, typename Domain::Integer mu)
bool checkChordGenericStandardPlaneComputer(PlaneComputer &computer, unsigned int nbplanes, int diameter)
Integer getRandomInteger(const Integer &first, const Integer &after_last)
HyperRectDomain< Space > Domain