DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
testCOBAGenericStandardPlaneComputer.cpp
Go to the documentation of this file.
1
16
29
31
#include <cstdlib>
32
#include <iostream>
33
#include <random>
34
#include <algorithm>
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/COBAGenericStandardPlaneComputer.h"
41
42
using namespace
std
;
43
using namespace
DGtal
;
44
46
// Functions for testing class COBAGenericStandardPlaneComputer.
48
50
// Standard services - public :
51
template
<
typename
Integer>
52
Integer
getRandomInteger
(
const
Integer
& first,
const
Integer
& after_last )
53
{
54
Integer
r = (
Integer
) rand();
55
return
( r % (after_last - first) ) + first;
56
}
57
58
template
<
typename
Domain>
59
std::vector<typename Domain::Point>
pointsInStandardPlane
60
(
const
Domain
&
domain
,
61
typename
Domain::Integer
a,
62
typename
Domain::Integer
b,
63
typename
Domain::Integer
c,
64
typename
Domain::Integer
mu )
65
{
66
typedef
typename
Domain::Integer
Integer
;
67
typedef
typename
Domain::Point
Point
;
68
typedef
typename
Domain::ConstIterator
ConstIterator
;
69
std::vector<Point> pts;
70
Integer
mup = mu + abs(a) + abs(b) + abs(c);
71
for
(
ConstIterator
it =
domain
.begin(), itE =
domain
.end();
72
it != itE; ++it )
73
{
74
Point
p = *it;
75
Integer
r = a * p[ 0 ] + b * p[ 1 ] + c * p[ 2 ];
76
if
( ( mu <= r ) && ( r < mup ) )
77
pts.push_back( p );
78
}
79
return
pts;
80
}
81
82
template
<
typename
PlaneComputer >
83
bool
checkCOBAGenericStandardPlaneComputer
84
( PlaneComputer & computer,
unsigned
int
nbplanes,
int
diameter )
85
{
86
typedef
typename
PlaneComputer::Space
Space
;
87
typedef
HyperRectDomain<Space>
Domain
;
88
typedef
typename
Space::Integer
Integer
;
89
typedef
typename
Space::Point
Point
;
90
unsigned
int
nb = 0;
91
unsigned
int
nbok = 0;
92
Domain
domain
(
Point
( -diameter, -diameter, -diameter ),
93
Point
( diameter, diameter, diameter ) );
94
Integer
a, b, c, mu;
95
std::random_device
rd
;
96
std::mt19937
g
(
rd
());
97
98
for
(
unsigned
int
p = 0; p < nbplanes; ++p )
99
{
100
do
{
101
a =
getRandomInteger
( -diameter, diameter+1 );
102
b =
getRandomInteger
( -diameter, diameter+1 );
103
c =
getRandomInteger
( -diameter, diameter+1 );
104
}
105
while
( ( a == 0 ) && ( b == 0 ) && ( c == 0 ) );
106
mu =
getRandomInteger
( -diameter, diameter );
107
std::vector<Point> pts =
pointsInStandardPlane
(
domain
, a, b, c, mu );
108
computer.init( 2*diameter, 1, 1 );
109
++nb; nbok += computer.extend( pts.begin(), pts.end() ) ? 1 : 0;
110
trace
.
info
() <<
"Primitive="
<< computer.primitive() << std::endl;
111
trace
.
info
() <<
"("
<< nbok <<
"/"
<< nb <<
") extend "
112
<< pts.size() <<
" points of plane "
113
<< mu <<
" <= "
<< a <<
"*x+"
<< b <<
"*y+"
<< c <<
"*z+"
114
<<
" < "
<< (mu+a+b+c) << std::endl;
115
computer.init( 2*diameter, 1, 1 );
116
std::shuffle( pts.begin(), pts.end(),
g
);
117
++nb; nbok += computer.extend( pts.begin(), pts.end() ) ? 1 : 0;
118
trace
.
info
() <<
"Primitive="
<< computer.primitive() << std::endl;
119
trace
.
info
() <<
"("
<< nbok <<
"/"
<< nb <<
") extend "
120
<< pts.size() <<
" shuffled points of plane "
121
<< mu <<
" <= "
<< a <<
"*x+"
<< b <<
"*y+"
<< c <<
"*z+"
122
<<
" < "
<< (mu+a+b+c) << std::endl;
123
}
124
return
nb == nbok;
125
}
126
127
128
int
main
(
int
/*argc*/
,
char
**
/*argv*/
)
129
{
130
using namespace
Z3i
;
131
132
typedef
COBAGenericStandardPlaneComputer<Space, int64_t>
PlaneComputer;
133
134
bool
ok;
135
PlaneComputer plane;
136
plane.
init
( 100, 1, 1 );
137
ok = plane.extend(
Point
(0,0,0) );
138
trace
.
info
() <<
"Point(0,0,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
139
trace
.
info
() << plane << std::endl;
140
ok = plane.extend(
Point
(1,0,0) );
141
trace
.
info
() <<
"Point(1,0,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
142
trace
.
info
() << plane << std::endl;
143
ok = plane.extend(
Point
(0,1,0) );
144
trace
.
info
() <<
"Point(0,1,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
145
trace
.
info
() << plane << std::endl;
146
ok = plane.extend(
Point
(1,1,0) );
147
trace
.
info
() <<
"Point(1,1,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
148
trace
.
info
() << plane << std::endl;
149
ok = plane.extend(
Point
(2,0,0) );
150
trace
.
info
() <<
"Point(2,0,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
151
trace
.
info
() << plane << std::endl;
152
ok = plane.extend(
Point
(0,2,0) );
153
trace
.
info
() <<
"Point(0,2,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
154
trace
.
info
() << plane << std::endl;
155
ok = plane.extend(
Point
(0,2,0) );
156
trace
.
info
() <<
"Point(0,2,0) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
157
trace
.
info
() << plane << std::endl;
158
ok = plane.extend(
Point
(1,1,1) );
159
trace
.
info
() <<
"Point(1,1,1) is "
<< ( ok ?
"ok"
:
"ko"
) << std::endl;
160
trace
.
info
() << plane << std::endl;
161
checkCOBAGenericStandardPlaneComputer
( plane, 5, 20 );
162
163
return
0;
164
}
DGtal::COBAGenericStandardPlaneComputer
Aim: A class that recognizes pieces of digital planes of given axis width. When the diagonal width is...
Definition
COBAGenericStandardPlaneComputer.h:129
DGtal::COBAGenericStandardPlaneComputer::init
void init(InternalInteger diameter, InternalInteger widthNumerator=NumberTraits< InternalInteger >::ONE, InternalInteger widthDenominator=NumberTraits< InternalInteger >::ONE)
DGtal::HyperRectDomain
Aim: Parallelepidec region of a digital space, model of a 'CDomain'.
Definition
HyperRectDomain.h:100
DGtal::HyperRectDomain< Space >::Integer
Space::Integer Integer
Definition
HyperRectDomain.h:114
DGtal::HyperRectDomain< Space >::ConstIterator
Iterator ConstIterator
Definition
HyperRectDomain.h:125
DGtal::HyperRectDomain< Space >::Point
Space::Point Point
Definition
HyperRectDomain.h:113
DGtal::ConstIterator
DGtal::Point
DGtal::SpaceND< 3, Integer >::Integer
Integer Integer
Definition
SpaceND.h:102
DGtal::SpaceND< 3, Integer >::Point
PointVector< dim, Integer > Point
Definition
SpaceND.h:110
DGtal::Trace::info
std::ostream & info()
DGtal::Domain
Integer
Point::Coordinate Integer
Definition
examplePlaneProbingParallelepipedEstimator.cpp:44
DGtal::Z3i
Z3i this namespace gathers the standard of types for 3D imagery.
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
DGtal::trace
Trace trace
std
STL namespace.
DGtal::Space
g
std::mt19937 g(rd())
rd
std::random_device rd
Definition
testAffineBasis.cpp:45
checkCOBAGenericStandardPlaneComputer
bool checkCOBAGenericStandardPlaneComputer(PlaneComputer &computer, unsigned int nbplanes, int diameter)
Definition
testCOBAGenericStandardPlaneComputer.cpp:84
pointsInStandardPlane
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)
Definition
testChordGenericStandardPlaneComputer.cpp:60
getRandomInteger
Integer getRandomInteger(const Integer &first, const Integer &after_last)
Definition
testChordNaivePlaneComputer-benchmark.cpp:49
main
int main(int, char **)
Definition
testIntegerComputer.cpp:331
domain
Domain domain
Definition
testProjection.cpp:88
tests
geometry
surfaces
testCOBAGenericStandardPlaneComputer.cpp
Generated on
for DGtal by
1.18.0