DGtal 1.4.0
Loading...
Searching...
No Matches
exampleBoundedLatticePolytopeCount3D.cpp File Reference
#include "DGtal/base/Common.h"
#include "DGtal/geometry/volumes/ConvexityHelper.h"
#include "DGtal/geometry/volumes/BoundedLatticePolytope.h"
Include dependency graph for exampleBoundedLatticePolytopeCount3D.cpp:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

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
2022/06/19

An example file named exampleBoundedLatticePolytopeCount3D.

This file is part of the DGtal library.

Definition in file exampleBoundedLatticePolytopeCount3D.cpp.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 62 of file exampleBoundedLatticePolytopeCount3D.cpp.

63{
64 int N = argc > 1 ? atoi( argv[ 1 ] ) : 100; // 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;
70 typedef Helper::LatticePolytope Polytope;
71 typedef Polytope::Point Point;
72 // Compute all polytopes
73 DGtal::trace.beginBlock( "Compute 3D polytopes" );
74 std::vector< Polytope > polytopes;
75 int sum_nb_facets = 0;
76 for ( int i = 0; i < N; i++ )
77 {
78 std::vector< Point > V;
79 for ( int i = 0; i < nb; i++ ) {
80 Point p( rand() % (2*R+1) - R, rand() % (2*R+1) - R, rand() % (2*R+1) - R );
81 V.push_back( p );
82 }
83 Polytope P = Helper::computeLatticePolytope( V );
84 sum_nb_facets += P.nbHalfSpaces();
85 polytopes.push_back( P );
86 }
87 double t1 = DGtal::trace.endBlock();
88 DGtal::trace.info() << "Computed " << N
89 << " 3D polytopes with " << ( sum_nb_facets / (double) N )
90 << " facets on average, in " << t1 << " ms." << std::endl;
91 // Count interior points (slow method)
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 )
96 {
97 const auto nb = P.countByScanning();
98 slow_nb += nb;
99 slow_counts.push_back( nb );
100 }
101 double t2 = DGtal::trace.endBlock();
102 // Count interior points (fast method)
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 )
107 {
108 const auto nb = P.count();
109 fast_nb += nb;
110 fast_counts.push_back( nb );
111 }
112 double t3 = DGtal::trace.endBlock();
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;
119 return 0;
120}
void beginBlock(const std::string &keyword="")
std::ostream & info()
double endBlock()
boost::int64_t int64_t
signed 94-bit integer.
Definition BasicTypes.h:74
Trace trace
Definition Common.h:153
Aim: Provides a set of functions to facilitate the computation of convex hulls and polytopes,...
MyPointD Point

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