DGtal 1.4.0
Loading...
Searching...
No Matches
ImplicitBall.h
1
17#pragma once
18
31#if defined(ImplicitBall_RECURSES)
32#error Recursive header files inclusion detected in ImplicitBall.h
33#else // defined(ImplicitBall_RECURSES)
35#define ImplicitBall_RECURSES
36
37#if !defined ImplicitBall_h
39#define ImplicitBall_h
40
42// Inclusions
43#include <iostream>
44#include "DGtal/base/Common.h"
45#include "DGtal/kernel/NumberTraits.h"
46#include "DGtal/shapes/implicit/CImplicitFunction.h"
48
49namespace DGtal
50{
51
53
63 template <typename TSpace>
65 {
66
67 public:
69 typedef TSpace Space;
70 typedef typename Space::RealPoint RealPoint;
71 typedef typename Space::Integer Integer;
72 typedef double Value;
73
81 ImplicitBall(const RealPoint &aCenter, const double &aRadius): myCenter(aCenter),
82 myRadius(aRadius)
83 {};
84
90
91
92 // ----------------------- Interface --------------------------------------
93 public:
94
95 inline
97 {
98 return myRadius - (aPoint - myCenter ).norm();
99 }
100
101 inline
103 {
104 if (this->operator()(aPoint) > 0.0)
105 return INSIDE;
106 else
107 if (this->operator()(aPoint) < 0.0)
108 return OUTSIDE;
109 else
110 return ON;
111 }
112
113 inline
115 {
117 }
118
119 inline
121 {
123 }
124
129 {
130 return myCenter;
131 }
132
137 inline
138 void moveTo( const RealPoint& newCenter )
139 {
140 myCenter = newCenter;
141 }
142
143 // ----------------------- Interface --------------------------------------
144 public:
145
150 void selfDisplay ( std::ostream & out ) const;
151
156 bool isValid() const;
157
158 // ------------------------- Protected Datas ------------------------------
159 private:
160 // ------------------------- Private Datas --------------------------------
161 private:
162
165
167 double myRadius;
168
169 // ------------------------- Hidden services ------------------------------
170 protected:
171
177
178 private:
179
187
188
189 }; // end of class ImplicitBall
190
191
198 template <typename T>
199 std::ostream&
200 operator<< ( std::ostream & out, const ImplicitBall<T> & object );
201
202} // namespace DGtal
203
204
206// Includes inline functions.
207#include "DGtal/shapes/implicit/ImplicitBall.ih"
208
209// //
211
212#endif // !defined ImplicitBall_h
213
214#undef ImplicitBall_RECURSES
215#endif // else defined(ImplicitBall_RECURSES)
Aim: model of CEuclideanOrientedShape and CEuclideanBoundedShape concepts to create a ball in nD....
double myRadius
Ball Radius.
Orientation orientation(const RealPoint &aPoint) const
Value operator()(const RealPoint &aPoint) const
RealPoint center() const
RealPoint getUpperBound() const
ImplicitBall & operator=(const ImplicitBall &other)
void selfDisplay(std::ostream &out) const
Space::RealPoint RealPoint
Space::Integer Integer
void moveTo(const RealPoint &newCenter)
RealPoint getLowerBound() const
RealPoint myCenter
Ball center.
bool isValid() const
ImplicitBall< TSpace > Self
ImplicitBall(const RealPoint &aCenter, const double &aRadius)
static Self diagonal(Component val=1)
TInteger Integer
Arithmetic ring induced by (+,-,*) and Integer numbers.
Definition SpaceND.h:102
PointVector< dim, double > RealPoint
Definition SpaceND.h:117
DGtal is the top-level namespace which contains all DGtal functions and types.
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
Orientation
Definition Common.h:141
@ INSIDE
Definition Common.h:141
@ OUTSIDE
Definition Common.h:141
@ ON
Definition Common.h:141
const Point aPoint(3, 4)