IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
Circle2d.h
1 // Circle2d.h:
3 // ---------
4 //
14 
15 #ifndef __IPSDKGEOMETRY_CIRCLE2D_H__
16 #define __IPSDKGEOMETRY_CIRCLE2D_H__
17 
18 // suppression warnings
19 // warning C4251: 'ipsdk::geom::Circle2d<T>::_centerPt' : struct 'ipsdk::geom::Point2dData<T>' needs to have dll-interface to be used by clients of class 'ipsdk::geom::Circle2d<T>'
20 #pragma warning (push)
21 #pragma warning (disable : 4251)
22 
24 #include <IPSDKGeometry/Entity/2d/BaseTypedGeometryEntity2d.h>
25 #include <IPSDKGeometry/Entity/2d/Point/Point2d.h>
28 
29 namespace ipsdk {
30 namespace geom {
31 
34 
35 template <typename T>
37 {
38  // declare 2d geometry entity
40 
41 // predefined public types
42 public:
44  static const eCoordinateSystem2dType::domain g_coordinateSystem2dType = eCoordinateSystem2dType::eCS2DT_Cartesian;
45 
47  static const eEntity2dType::domain g_entity2dType = eEntity2dType::eE2DT_Circle;
48 
49 public:
52  Circle2d();
53  Circle2d(const Point2dData<T>& center, const T radius);
54  Circle2d(const Point2d<T>& center, const T radius);
55  Circle2d(const T xCenter, const T yCenter, const T radius);
56  ~Circle2d();
58 
59 // methods
60 public:
62  inline eCoordinateSystem2dType getCoordinateSystem2dType() const;
63 
65  inline eEntity2dType getEntity2dType() const;
66 
69  inline void setCoords(const Point2dData<T>& centerPt, const T radius);
70  inline void setCoords(const Point2d<T>& centerPt, const T radius);
71  inline void setCoords(const T xCenter, const T yCenter, const T radius);
72  inline void setCenter(const Point2dData<T>& centerPt);
73  inline void setCenter(const Point2d<T>& centerPt);
74  inline void setCenter(const T xCenter, const T yCenter);
75  inline void setRadius(const T radius);
76  inline T getRadius() const;
77  inline T centerX() const;
78  inline T centerY() const;
79  inline const Point2dData<T>& center() const;
81 
84  inline ipReal64 distance(const Point2d<T>& pt) const;
85  ipReal64 distance(const Point2dData<T>& pt) const;
87 
91  inline ipReal64 signedDistance(const Point2d<T>& pt) const;
92  ipReal64 signedDistance(const Point2dData<T>& pt) const;
94 
96  ipReal64 perimeter() const;
97 
99  ipReal64 area() const;
100 
101 // attributes
102 protected:
105 
108 
109 };
110 
113 
114 template <typename T>
117 {
118  return g_coordinateSystem2dType;
119 }
120 
121 template <typename T>
122 inline eEntity2dType
124 {
125  return g_entity2dType;
126 }
127 
128 template <typename T>
129 inline void
131  const T radius)
132 {
133  _centerPt = centerPt;
134  _radius = radius;
135 }
136 
137 template <typename T>
138 inline void
140  const T radius)
141 {
142  _centerPt = centerPt.getCoords();
143  _radius = radius;
144 }
145 
146 template <typename T>
147 inline void
148 Circle2d<T>::setCoords(const T xCenter, const T yCenter,
149  const T radius)
150 {
151  _centerPt.setCoords(xCenter, yCenter);
152  _radius = radius;
153 }
154 
155 template <typename T>
156 inline void
158 {
159  _centerPt = centerPt;
160 }
161 
162 template <typename T>
163 inline void
165 {
166  _centerPt = centerPt.getCoords();
167 }
168 
169 template <typename T>
170 inline void
171 Circle2d<T>::setCenter(const T xCenter, const T yCenter)
172 {
173  _centerPt.setCoords(xCenter, yCenter);
174 }
175 
176 template <typename T>
177 inline void
178 Circle2d<T>::setRadius(const T radius)
179 {
180  _radius = radius;
181 }
182 
183 template <typename T>
184 inline T
186 {
187  return _centerPt._x;
188 }
189 
190 template <typename T>
191 inline T
193 {
194  return _centerPt._y;
195 }
196 
197 template <typename T>
198 inline const Point2dData<T>&
200 {
201  return _centerPt;
202 }
203 
204 template <typename T>
205 inline T
207 {
208  return _radius;
209 }
210 
211 template <typename T>
212 inline ipReal64
214 {
215  return distance(pt.getCoords());
216 }
217 
218 template <typename T>
219 inline ipReal64
221 {
222  return std::abs(signedDistance(pt));
223 }
224 
225 template <typename T>
226 inline ipReal64
228 {
229  return signedDistance(pt.getCoords());
230 }
231 
232 template <typename T>
233 inline ipReal64
235 {
236  return math::circlePerimeter(_radius);
237 }
238 
239 template <typename T>
240 inline ipReal64
242 {
243  return math::circleArea(_radius);
244 }
245 
248 
249 } // end of namespace geom
250 } // end of namespace ipsdk
251 
252 #pragma warning (pop)
253 
254 #endif // __IPSDKGEOMETRY_CIRCLE2D_H__
void setRadius(const T radius)
access to the circle parameters
Definition: Circle2d.h:178
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
T centerY() const
access to the circle parameters
Definition: Circle2d.h:192
Point2dData< T > _centerPt
center of the circle
Definition: Circle2d.h:104
Point class associated to cartesian 2d coordinates.
Definition: GeometryEntity2dTypes.h:28
Circle.
Definition: GeometryEntity2dTypes.h:54
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
eCoordinateSystem2dType
Enumerate describing coordinate system 2d type.
Definition: GeometryEntity2dTypes.h:76
ipReal64 perimeter() const
retrieve circle perimeter
Definition: Circle2d.h:234
IPSDKGEOMETRY_API ipReal64 distance(const Point2d< T > &pt1, const Point2d< T > &pt2)
compute euclidian distance between two points
void setCenter(const Point2dData< T > &centerPt)
access to the circle parameters
Definition: Circle2d.h:157
ipReal64 signedDistance(const Point2d< T > &pt) const
retrieve signed orthogonal distance between point and circle (positive value stands for exterior poin...
Definition: Circle2d.h:227
IPSDK_FORCEINLINE ipReal64 circleArea(const ipReal64 radius)
compute circle area
Definition: Circle2d.h:45
Definition of import/export macro for library.
#define IPSDKGEOMETRY_API
Import/Export macro for library IPSDKGeometry.
Definition: IPSDKGeometryExports.h:25
Base class for typed 3d geometry entities.
Definition: BaseTypedGeometryEntity2d.h:27
T centerX() const
access to the circle parameters
Definition: Circle2d.h:185
#define IPSDK_DECLARE_GEOMETRY_ENTITY_2D(libraryName, className)
Macro allowing to declare a geometry entity 2d.
Definition: GeometryEntity2dHdrMacros.h:131
const Point2dData< T > & center() const
access to the circle parameters
Definition: Circle2d.h:199
eCoordinateSystem2dType getCoordinateSystem2dType() const
method allowing to retrieve coordinate system 2d type
Definition: Circle2d.h:116
Utility functions used to handle circles 2d.
Basic operators used for 2d circle management.
const Point2dData< T > & getCoords() const
access to point coordinates
Definition: Point2d.h:139
ipReal64 area() const
retrieve circle area
Definition: Circle2d.h:241
eEntity2dType
Enumerate describing entity 2d type.
Definition: GeometryEntity2dTypes.h:38
2d circle associated to cartesian 2d coordinates
Definition: Circle2d.h:36
T _radius
radius of the circle
Definition: Circle2d.h:107
ipReal64 distance(const Point2d< T > &pt) const
retrieve orthogonal distance between point and circle
Definition: Circle2d.h:213
T getRadius() const
access to the circle parameters
Definition: Circle2d.h:206
void setCoords(const Point2dData< T > &centerPt, const T radius)
access to the circle parameters
Definition: Circle2d.h:130
Lightweight structure used to store Point2d data.
Definition: GeometryEntity2dTypes.h:26
eEntity2dType getEntity2dType() const
method allowing to retrieve entity 2d type
Definition: Circle2d.h:123
IPSDK_FORCEINLINE PackT abs(const PackT &in)
returns the absolute value of a pack
Definition: abs.h:41
IPSDK_FORCEINLINE ipReal64 circlePerimeter(const ipReal64 radius)
compute circle perimeter
Definition: Circle2d.h:38
Cartesian coordinate system.
Definition: GeometryEntity2dTypes.h:78