DGtal 1.3.0
Loading...
Searching...
No Matches
DECExamplesCommon.h
1#if !defined(__DEC_EXAMPLE_COMMON_H__)
2#define __DEC_EXAMPLE_COMMON_H__
3
4#include "DGtal/base/Common.h"
5#include "DGtal/helpers/StdDefs.h"
6
7inline DGtal::Z2i::DigitalSet generateDiskSet(const DGtal::Z2i::Domain& domain)
8{
10 DGtal::Z2i::RealPoint center = domain.lowerBound() + domain.upperBound();
11 center /= 2.;
12 DGtal::Z2i::RealPoint delta = domain.upperBound() - domain.lowerBound();
13 double radius = delta[0]>delta[1] ? delta[1] : delta[0];
14 radius += 1.;
15 radius /= 2.;
16
17 for (DGtal::Z2i::Domain::ConstIterator di=domain.begin(), die=domain.end(); di!=die; di++)
18 {
19 const DGtal::Z2i::Point point = *di;
20 const DGtal::Z2i::RealPoint point_real = DGtal::Z2i::RealPoint(point) - center;
21 if (point_real.norm() > 5.*radius/6.) continue;
22 set.insert(point);
23 }
24
25 return set;
26}
27
28inline DGtal::Z2i::DigitalSet generateRingSet(const DGtal::Z2i::Domain& domain)
29{
31 DGtal::Z2i::RealPoint center = domain.lowerBound() + domain.upperBound();
32 center /= 2.;
33 DGtal::Z2i::RealPoint delta = domain.upperBound() - domain.lowerBound();
34 double radius = delta[0]>delta[1] ? delta[1] : delta[0];
35 radius += 1.;
36 radius /= 2.;
37
38 for (DGtal::Z2i::Domain::ConstIterator di=domain.begin(), die=domain.end(); di!=die; di++)
39 {
40 const DGtal::Z2i::Point point = *di;
41 const DGtal::Z2i::RealPoint point_real = DGtal::Z2i::RealPoint(point) - center;
42 if (point_real.norm() < 1.*radius/6.) continue;
43 if (point_real.norm() > 5.*radius/6.) continue;
44 set.insert(point);
45 }
46
47 return set;
48}
49
50inline DGtal::Z2i::DigitalSet generateDoubleRingSet(const DGtal::Z2i::Domain& domain)
51{
53 DGtal::Z2i::RealPoint center = domain.lowerBound() + domain.upperBound();
54 center /= 2.;
55 DGtal::Z2i::RealPoint delta = domain.upperBound() - domain.lowerBound();
56 double radius = delta[0]>delta[1] ? delta[1] : delta[0];
57 radius += 1.;
58 radius /= 2.;
59
60 center -= DGtal::Z2i::RealPoint(radius/2.+radius/5.,0);
61 for (DGtal::Z2i::Domain::ConstIterator di=domain.begin(), die=domain.end(); di!=die; di++)
62 {
63 const DGtal::Z2i::Point point = *di;
64 const DGtal::Z2i::RealPoint point_real = DGtal::Z2i::RealPoint(point) - center;
65 if (point_real.norm() < 1.*radius/6.) continue;
66 if (point_real.norm() > 4.5*radius/6.) continue;
67 set.insert(point);
68 }
69
70 center += DGtal::Z2i::RealPoint(2*(radius/2.+radius/5.),0);
71 for (DGtal::Z2i::Domain::ConstIterator di=domain.begin(), die=domain.end(); di!=die; di++)
72 {
73 const DGtal::Z2i::Point point = *di;
74 const DGtal::Z2i::RealPoint point_real = DGtal::Z2i::RealPoint(point) - center;
75 if (point_real.norm() < 1.*radius/6.) continue;
76 if (point_real.norm() > 4.5*radius/6.) continue;
77 set.insert(point);
78 }
79
80 return set;
81}
82
83#endif
84
Aim: A wrapper class around a STL associative container for storing sets of digital points within som...
Iterator for HyperRectDomain.
Aim: Implements basic operations that will be used in Point and Vector classes.
Definition: PointVector.h:593
double norm(const NormType type=L_2) const
Space::RealPoint RealPoint
Definition: StdDefs.h:97
Point center(const std::vector< Point > &points)
Domain domain