36 #include "DGtal/topology/Object.h"
37 #include "DGtal/shapes/Shapes.h"
38 #include "DGtal/helpers/StdDefs.h"
39 #include "DGtal/io/boards/Board2D.h"
40 #include "DGtal/io/Color.h"
45 using namespace DGtal;
64 template <
typename Object,
typename Map>
72 typedef typename DigitalSet::Domain
Domain;
73 typedef typename Domain::ConstIterator DomainConstIterator;
75 Point p1 = Point::diagonal( -1 );
76 Point p2 = Point::diagonal( 1 );
77 Point c = Point::diagonal( 0 );
78 Domain domain( p1, p2 );
79 DigitalSet shapeSet( domain );
80 Object shape( dt, shapeSet );
82 for ( DomainConstIterator it = domain.begin(); it != domain.end(); ++it )
85 &&
"[generateSimplicityTable] number of configurations is too high." );
86 unsigned int nbCfg = 1 << k;
87 for (
unsigned int cfg = 0; cfg < nbCfg; ++cfg )
89 shape.pointSet().clear();
90 shape.pointSet().insert( c );
91 unsigned int mask = 1;
92 for ( DomainConstIterator it = domain.begin(); it != domain.end(); ++it )
96 if ( cfg & mask ) shape.pointSet().insert( *it );
100 bool simple = shape.isSimple( c );
118 template <
typename Object,
typename Map>
120 displaySimplicityTable(
Board2D & board,
127 typedef typename DigitalSet::Domain Domain;
128 typedef typename Domain::ConstIterator DomainConstIterator;
130 Point p1 = Point::diagonal( -1 );
131 Point p2 = Point::diagonal( 1 );
132 Point c = Point::diagonal( 0 );
133 Domain domain( p1, p2 );
135 Point q1 = Point::diagonal( -1 );
136 Point q2 = Point::diagonal( 4*16-1 );
137 Domain fullDomain( q1, q2 );
138 board <<
SetMode( fullDomain.className(),
"Paving" );
139 unsigned int cfg = 0;
140 for (
unsigned int y = 0; y < 16; ++y )
141 for (
unsigned int x = 0; x < 16; ++x, ++cfg )
143 bool simple = map[ cfg ];
144 Point base( x*4, y*4 );
145 unsigned int mask = 1;
146 for ( DomainConstIterator it = domain.begin();
147 it != domain.end(); ++it )
149 Point q = base + (*it);
153 Color( 30, 30, 30 ) ) );
161 Color( 10, 255, 10 ) )
162 : new CustomColors(
Color( 0, 0, 0 ),
163 Color( 255, 10, 10 ) ) );
168 ?
new CustomColors(
Color( 0, 0, 0 ),
169 Color( 245, 255, 245 ) )
170 : new CustomColors(
Color( 0, 0, 0 ),
171 Color( 255, 245, 245 ) ) );
182 template <
typename Map>
184 outputTableAsArray( ostream & out,
186 const string & tableName )
188 typedef typename Map::const_iterator MapConstIterator;
189 out <<
"const bool " << tableName <<
"[ " << map.size() <<
" ] = { ";
190 for ( MapConstIterator it = map.begin(), it_end = map.end();
195 if ( it != it_end ) out <<
", ";
197 out <<
" };" << std::endl;
201 int main(
int argc,
char** argv )
203 typedef std::vector<bool> ConfigMap;
207 ConfigMap table4_8( 256 );
208 generateSimplicityTable< Object4_8 >( dt4_8, table4_8 );
212 ConfigMap table8_4( 256 );
213 generateSimplicityTable< Object8_4 >( dt8_4, table8_4 );
218 displaySimplicityTable< Object4_8 >( board, dt4_8, table4_8 );
219 board.
saveEPS(
"table4_8.eps" );
224 displaySimplicityTable< Object8_4 >( board, dt8_4, table8_4 );
225 board.
saveEPS(
"table8_4.eps" );
228 outputTableAsArray( std::cout, table4_8,
"simplicityTable4_8" );
229 outputTableAsArray( std::cout, table8_4,
"simplicityTable8_4" );