62int main(
int argc,
char* argv[] )
64 int N = argc > 1 ? atoi( argv[ 1 ] ) : 100;
65 int nb = argc > 2 ? atoi( argv[ 2 ] ) : 10;
66 int R = argc > 3 ? atoi( argv[ 3 ] ) : 50;
70 typedef Helper::LatticePolytope Polytope;
71 typedef Polytope::Point
Point;
74 std::vector< Polytope > polytopes;
75 int sum_nb_facets = 0;
76 for (
int i = 0; i < N; i++ )
78 std::vector< Point > V;
79 for (
int j = 0; j < nb; j++ ) {
80 Point p( rand() % (2*R+1) - R, rand() % (2*R+1) - R, rand() % (2*R+1) - R );
83 Polytope P = Helper::computeLatticePolytope( V );
84 sum_nb_facets += P.nbHalfSpaces();
85 polytopes.push_back( P );
89 <<
" 3D polytopes with " << ( sum_nb_facets / (double) N )
90 <<
" facets on average, in " << t1 <<
" ms." << std::endl;
92 DGtal::trace.beginBlock(
"Compute number of lattice points within polytope (slow)" );
93 std::size_t slow_nb = 0;
94 std::vector< Integer > slow_counts;
95 for (
const auto& P : polytopes )
97 const auto nb2 = P.countByScanning();
99 slow_counts.push_back( nb2 );
103 DGtal::trace.beginBlock(
"Compute number of lattice points within polytope (fast)" );
104 std::size_t fast_nb = 0;
105 std::vector< Integer > fast_counts;
106 for (
const auto& P : polytopes )
108 const auto nb2 = P.count();
110 fast_counts.push_back( nb2 );
113 bool ok = std::equal( slow_counts.cbegin(), slow_counts.cend(), fast_counts.cbegin() );
114 DGtal::trace.info() <<
"Computed inside points is " << ( ok ?
"OK" :
"ERROR" ) << std::endl;
115 DGtal::trace.info() <<
"Reference method computed " << slow_nb
116 <<
" points in " << t2 <<
" ms." << std::endl;
117 DGtal::trace.info() <<
"Fast method computed " << fast_nb
118 <<
" points in " << t3 <<
" ms." << std::endl;