DGtal 1.3.0
Loading...
Searching...
No Matches
exampleBoundedLatticePolytopeCount4D.cpp
Go to the documentation of this file.
1
58#include "DGtal/base/Common.h"
59#include "DGtal/geometry/volumes/ConvexityHelper.h"
60#include "DGtal/geometry/volumes/BoundedLatticePolytope.h"
61
62int main( int argc, char* argv[] )
63{
64 int N = argc > 1 ? atoi( argv[ 1 ] ) : 10; // nb of polytopes
65 int nb = argc > 2 ? atoi( argv[ 2 ] ) : 10; // nb points per polytope
66 int R = argc > 3 ? atoi( argv[ 3 ] ) : 50; // max diameter of shape
67
68 typedef int64_t Integer;
71 typedef Helper::LatticePolytope Polytope;
72 typedef Polytope::Point Point;
73 // Compute all polytopes
74 DGtal::trace.beginBlock( "Compute 4D polytopes" );
75 std::vector< Polytope > polytopes;
76 int sum_nb_facets = 0;
77 for ( int i = 0; i < N; i++ )
78 {
79 std::vector< Point > V;
80 for ( int i = 0; i < nb; i++ ) {
81 Point p( rand() % (2*R+1) - R, rand() % (2*R+1) - R,
82 rand() % (2*R+1) - R, rand() % (2*R+1) - R );
83 V.push_back( p );
84 }
85 Polytope P = Helper::computeLatticePolytope( V );
86 sum_nb_facets += P.nbHalfSpaces();
87 polytopes.push_back( P );
88 }
89 double t1 = DGtal::trace.endBlock();
90 DGtal::trace.info() << "Computed " << N
91 << " 4D polytopes with " << ( sum_nb_facets / (double) N )
92 << " facets on average, in " << t1 << " ms." << std::endl;
93 // Count interior points (slow method)
94 DGtal::trace.beginBlock( "Compute number of lattice points within polytope (slow)" );
95 std::size_t slow_nb = 0;
96 std::vector< Integer > slow_counts;
97 for ( const auto& P : polytopes )
98 {
99 const auto nb = P.countByScanning();
100 slow_nb += nb;
101 slow_counts.push_back( nb );
102 }
103 double t2 = DGtal::trace.endBlock();
104 // Count interior points (fast method)
105 DGtal::trace.beginBlock( "Compute number of lattice points within polytope (fast)" );
106 std::size_t fast_nb = 0;
107 std::vector< Integer > fast_counts;
108 for ( const auto& P : polytopes )
109 {
110 const auto nb = P.count();
111 fast_nb += nb;
112 fast_counts.push_back( nb );
113 }
114 double t3 = DGtal::trace.endBlock();
115 bool ok = std::equal( slow_counts.cbegin(), slow_counts.cend(), fast_counts.cbegin() );
116 DGtal::trace.info() << "Computed inside points is " << ( ok ? "OK" : "ERROR" ) << std::endl;
117 DGtal::trace.info() << "Reference method computed " << slow_nb
118 << " points in " << t2 << " ms." << std::endl;
119 DGtal::trace.info() << "Fast method computed " << fast_nb
120 << " points in " << t3 << " ms." << std::endl;
121 return 0;
122}
123
void beginBlock(const std::string &keyword="")
std::ostream & info()
double endBlock()
Trace trace
Definition: Common.h:154
Aim: Provides a set of functions to facilitate the computation of convex hulls and polytopes,...
int main()
Definition: testBits.cpp:56
MyPointD Point
Definition: testClone2.cpp:383