IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
Ellipsoid3d.h
1 // Ellipsoid3d.h:
3 // --------------
4 //
16 
17 #ifndef __IPSDKGEOMETRY_ELLIPSOID3D_H__
18 #define __IPSDKGEOMETRY_ELLIPSOID3D_H__
19 
20 // suppression warnings
21 // warning C4251: 'ipsdk::geom::Ellipsoid3d<ipsdk::ipInt32>::_centerPt': struct 'ipsdk::geom::Point3dData<T>' needs to have dll-interface to be used by clients of class 'ipsdk::geom::Ellipsoid3d<ipsdk::ipInt32>'
22 #pragma warning (push)
23 #pragma warning (disable : 4251)
24 
26 #include <IPSDKGeometry/Entity/3d/BaseTypedGeometryEntity3d.h>
27 #include <IPSDKGeometry/Entity/3d/Point/Point3d.h>
31 
32 namespace ipsdk {
33 namespace geom {
34 
37 
38 template <typename T>
40 {
41  // declare 3d geometry entity
43 
44 // predefined public types
45 public:
47  static const eCoordinateSystem3dType::domain g_coordinateSystem3dType = eCoordinateSystem3dType::eCS3DT_Cartesian;
48 
50  static const eEntity3dType::domain g_entity3dType = eEntity3dType::eE3DT_Ellipsoid;
51 
52 public:
55  Ellipsoid3d();
56  Ellipsoid3d(const Point3dData<T>& centerPt, const T majorRadius, const T mediumRadius, const T minorRadius, const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
57  Ellipsoid3d(const Point3d<T>& centerPt, const T majorRadius, const T mediumRadius, const T minorRadius, const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
58  Ellipsoid3d(const T xCenter, const T yCenter, const T zCenter, const T majorRadius, const T mediumRadius, const T minorRadius, const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
59  ~Ellipsoid3d();
61 
62 // methods
63 public:
65  inline eCoordinateSystem3dType getCoordinateSystem3dType() const;
66 
68  inline eEntity3dType getEntity3dType() const;
69 
72  inline void setCoords(const Point3dData<T>& centerPt,
73  const T majorRadius, const T mediumRadius, const T minorRadius,
74  const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
75  inline void setCoords(const Point3d<T>& centerPt,
76  const T majorRadius, const T mediumRadius, const T minorRadius,
77  const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
78  inline void setCoords(const T xCenter, const T yCenter, const T zCenter,
79  const T majorRadius, const T mediumRadius, const T minorRadius,
80  const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
81  inline void setCenter(const Point3dData<T>& centerPt);
82  inline void setCenter(const Point3d<T>& centerPt);
83  inline void setCenter(const T xCenter, const T yCenter, const T zCenter);
84  inline void setMajorRadius(const T majorRadius);
85  inline void setMediumRadius(const T mediumRadius);
86  inline void setMinorRadius(const T minorRadius);
87  inline void setOrientation(const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha);
88  inline T getMajorRadius() const;
89  inline T getMediumRadius() const;
90  inline T getMinorRadius() const;
91  inline ipReal64 getAlpha() const;
92  inline ipReal64 getBeta() const;
93  inline ipReal64 getChi() const;
94  inline const math::Matrix3d& getMatRot() const;
95  inline T centerX() const;
96  inline T centerY() const;
97  inline T centerZ() const;
98  inline const Point3dData<T>& center() const;
99  inline Point3dData<T>& center();
101 
103  inline ipReal64 area() const;
104 
106  inline ipReal64 volume() const;
107 
109  inline ipReal64 excentricity() const;
110 
113  inline ipReal64 radius(const ipReal64 theta, const ipReal64 phi) const;
114 
117  inline Point3dData<ipReal64> boundaryPoint(const ipReal64 theta, const ipReal64 phi) const;
118 
119 // attributes
120 protected:
123 
126 
129 
132 
135 
138 
141 
144 };
145 
148 
149 template <typename T>
152 {
153  return g_coordinateSystem3dType;
154 }
155 
156 template <typename T>
157 inline eEntity3dType
159 {
160  return g_entity3dType;
161 }
162 
163 template <typename T>
164 inline void
166  const T majorRadius, const T mediumRadius, const T minorRadius,
167  const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha)
168 {
169  _centerPt = centerPt;
170  _majorRadius = majorRadius;
171  _mediumRadius = mediumRadius;
172  _minorRadius = minorRadius;
173  setOrientation(chi, beta, alpha);
174 }
175 
176 template <typename T>
177 inline void
179  const T majorRadius, const T mediumRadius, const T minorRadius,
180  const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha)
181 {
182  _centerPt = centerPt.getCoords();
183  _majorRadius = majorRadius;
184  _mediumRadius = mediumRadius;
185  _minorRadius = minorRadius;
186  setOrientation(chi, beta, alpha);
187 }
188 
189 template <typename T>
190 inline void
191 Ellipsoid3d<T>::setCoords(const T xCenter, const T yCenter, const T zCenter,
192  const T majorRadius, const T mediumRadius, const T minorRadius,
193  const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha)
194 {
195  _centerPt.setCoords(xCenter, yCenter, zCenter);
196  _majorRadius = majorRadius;
197  _mediumRadius = mediumRadius;
198  _minorRadius = minorRadius;
199  setOrientation(chi, beta, alpha);
200 }
201 
202 template <typename T>
203 inline void
205 {
206  _centerPt = centerPt;
207 }
208 
209 template <typename T>
210 inline void
212 {
213  _centerPt = centerPt.getCoords();
214 }
215 
216 template <typename T>
217 inline void
218 Ellipsoid3d<T>::setCenter(const T xCenter, const T yCenter, const T zCenter)
219 {
220  _centerPt.setCoords(xCenter, yCenter, zCenter);
221 }
222 
223 template <typename T>
224 inline void
225 Ellipsoid3d<T>::setMajorRadius(const T majorRadius)
226 {
227  _majorRadius = majorRadius;
228 }
229 
230 template <typename T>
231 inline void
232 Ellipsoid3d<T>::setMediumRadius(const T mediumRadius)
233 {
234  _mediumRadius = mediumRadius;
235 }
236 
237 template <typename T>
238 inline void
239 Ellipsoid3d<T>::setMinorRadius(const T minorRadius)
240 {
241  _minorRadius = minorRadius;
242 }
243 
244 template <typename T>
245 inline void
246 Ellipsoid3d<T>::setOrientation(const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha)
247 {
248  _chi = chi;
249  _beta = beta;
250  _alpha = alpha;
251  _matRot = math::eulerToMatrix(chi, beta, alpha);
252 }
253 
254 template <typename T>
255 inline T
257 {
258  return _centerPt._x;
259 }
260 
261 template <typename T>
262 inline T
264 {
265  return _centerPt._y;
266 }
267 
268 template <typename T>
269 inline T
271 {
272  return _centerPt._z;
273 }
274 
275 template <typename T>
276 inline const Point3dData<T>&
278 {
279  return _centerPt;
280 }
281 
282 template <typename T>
283 inline Point3dData<T>&
285 {
286  return _centerPt;
287 }
288 
289 template <typename T>
290 inline T
292 {
293  return _majorRadius;
294 }
295 
296 template <typename T>
297 inline T
299 {
300  return _mediumRadius;
301 }
302 
303 template <typename T>
304 inline T
306 {
307  return _minorRadius;
308 }
309 
310 template <typename T>
311 inline ipReal64
313 {
314  return _alpha;
315 }
316 
317 template <typename T>
318 inline ipReal64
320 {
321  return _beta;
322 }
323 
324 template <typename T>
325 inline ipReal64
327 {
328  return _chi;
329 }
330 
331 template <typename T>
332 inline const math::Matrix3d&
334 {
335  return _matRot;
336 }
337 
338 template <typename T>
339 inline ipReal64
341 {
342  return math::ellipsoidArea(_majorRadius, _mediumRadius, _minorRadius);
343 }
344 
345 template <typename T>
346 inline ipReal64
348 {
349  return math::ellipsoidVolume(_majorRadius, _mediumRadius, _minorRadius);
350 }
351 
352 template <typename T>
353 inline ipReal64
355 {
356  return math::ellipsoidExcentricity(_majorRadius, _mediumRadius, _minorRadius);
357 }
358 
359 template <typename T>
360 inline ipReal64
361 Ellipsoid3d<T>::radius(const ipReal64 theta, const ipReal64 phi) const
362 {
363  return math::ellipsoidRadius(_majorRadius, _mediumRadius, _minorRadius,
364  _matRot,
365  theta, phi);
366 }
367 
368 template <typename T>
370 Ellipsoid3d<T>::boundaryPoint(const ipReal64 theta, const ipReal64 phi) const
371 {
373  math::ellipsoidPoint(_centerPt._x, _centerPt._y, _centerPt._z,
374  _majorRadius, _mediumRadius, _minorRadius,
375  _matRot,
376  theta, phi,
377  pt._x, pt._y, pt._z);
378 
379  return pt;
380 }
381 
384 
385 } // end of namespace geom
386 } // end of namespace ipsdk
387 
388 #pragma warning (pop)
389 
390 #endif // __IPSDKGEOMETRY_ELLIPSOID3D_H__
ipReal64 _alpha
orientation angle along the x axis
Definition: Ellipsoid3d.h:134
3d ellipsoid associated to cartesian 3d coordinates For a non rotated ellipse, the major radius follo...
Definition: Ellipsoid3d.h:39
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
ipReal64 area() const
retrieve ellipsoid area
Definition: Ellipsoid3d.h:340
eCoordinateSystem3dType
Enumerate describing coordinate system 3d type.
Definition: GeometryEntity3dTypes.h:74
ipReal64 getChi() const
access to the sphere parameters
Definition: Ellipsoid3d.h:326
IPSDK_FORCEINLINE void eulerToMatrix(const T cosChi, const T sinChi, const T cosBeta, const T sinBeta, const T cosAlpha, const T sinAlpha, T &rxx, T &rxy, T &rxz, T &ryx, T &ryy, T &ryz, T &rzx, T &rzy, T &rzz)
Convertion from euler angles to rotation matrix.
Definition: Angles3d.h:99
void setMinorRadius(const T minorRadius)
access to the sphere parameters
Definition: Ellipsoid3d.h:239
Point class associated to cartesian 3d coordinates.
Definition: GeometryEntity3dTypes.h:29
T getMinorRadius() const
access to the sphere parameters
Definition: Ellipsoid3d.h:305
Utility functions used to handle ellipsoid 3d.
ipReal64 excentricity() const
retrieve ellipsoid excentricity
Definition: Ellipsoid3d.h:354
T getMediumRadius() const
access to the sphere parameters
Definition: Ellipsoid3d.h:298
#define IPSDK_DECLARE_GEOMETRY_ENTITY_3D(libraryName, className)
Macro allowing to declare a geometry entity 3d.
Definition: GeometryEntity3dHdrMacros.h:131
IPSDKMATH_API ipReal64 ellipsoidVolume(const ipReal64 a, const ipReal64 b, const ipReal64 c)
function allowing to compute ellipsoid volume
T _x
x coordinate of point
Definition: Point3dData.h:69
ipReal64 radius(const ipReal64 theta, const ipReal64 phi) const
retrieve ellipsoid radius for a given orientation (see Points and vectors 3d representation) ...
Definition: Ellipsoid3d.h:361
eEntity3dType getEntity3dType() const
method allowing to retrieve entity 3d type
Definition: Ellipsoid3d.h:158
void setCoords(const Point3dData< T > &centerPt, const T majorRadius, const T mediumRadius, const T minorRadius, const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha)
access to the sphere parameters
Definition: Ellipsoid3d.h:165
T centerY() const
access to the sphere parameters
Definition: Ellipsoid3d.h:263
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
const Point3dData< T > & getCoords() const
access to point coordinates
Definition: Point3d.h:142
T getMajorRadius() const
access to the sphere parameters
Definition: Ellipsoid3d.h:291
Ellipsoid.
Definition: GeometryEntity3dTypes.h:50
Definition of import/export macro for library.
T _mediumRadius
medium radius
Definition: Ellipsoid3d.h:128
void setCenter(const Point3dData< T > &centerPt)
access to the sphere parameters
Definition: Ellipsoid3d.h:204
#define IPSDKGEOMETRY_API
Import/Export macro for library IPSDKGeometry.
Definition: IPSDKGeometryExports.h:25
T _majorRadius
major radius
Definition: Ellipsoid3d.h:125
T _minorRadius
minor radius
Definition: Ellipsoid3d.h:131
IPSDKMATH_API ipReal64 ellipsoidRadius(const ipReal64 a, const ipReal64 b, const ipReal64 c, const ipReal64 theta, const ipReal64 phi)
function allowing to compute axis aligned ellipsoid &#39;radius&#39; for a given orientation (see Points and ...
Basic operators used for ellipsoid 3d management.
ipReal64 getBeta() const
access to the sphere parameters
Definition: Ellipsoid3d.h:319
Point3dData< T > _centerPt
center of the ellipsoid
Definition: Ellipsoid3d.h:122
IPSDKMATH_API ipReal64 ellipsoidExcentricity(const ipReal64 a, const ipReal64 b, const ipReal64 c)
function allowing to compute ellipsoid excentricity
eEntity3dType
Enumerate describing entity 3d type.
Definition: GeometryEntity3dTypes.h:38
T centerZ() const
access to the sphere parameters
Definition: Ellipsoid3d.h:270
boost::numeric::ublas::bounded_matrix< ipReal64, 3, 3 > Matrix3d
3d matrix (3x3) type associated to library
Definition: LinearAlgebraTypes.h:54
T _y
y coordinate of point
Definition: Point3dData.h:72
Utility functions used to handle angles 3d.
ipReal64 getAlpha() const
access to the sphere parameters
Definition: Ellipsoid3d.h:312
eCoordinateSystem3dType getCoordinateSystem3dType() const
method allowing to retrieve coordinate system 3d type
Definition: Ellipsoid3d.h:151
ipReal64 volume() const
retrieve ellipsoid volume
Definition: Ellipsoid3d.h:347
ipReal64 _chi
orientation angle along the z axis
Definition: Ellipsoid3d.h:140
void setMediumRadius(const T mediumRadius)
access to the sphere parameters
Definition: Ellipsoid3d.h:232
void setMajorRadius(const T majorRadius)
access to the sphere parameters
Definition: Ellipsoid3d.h:225
Point3dData< ipReal64 > boundaryPoint(const ipReal64 theta, const ipReal64 phi) const
retrieve ellipsoid boundary point for a given orientation (see Points and vectors 3d representation) ...
Definition: Ellipsoid3d.h:370
T centerX() const
access to the sphere parameters
Definition: Ellipsoid3d.h:256
Base class for typed 3d geometry entities.
Definition: BaseTypedGeometryEntity3d.h:27
Cartesian coordinate system.
Definition: GeometryEntity3dTypes.h:76
T _z
z coordinate of point
Definition: Point3dData.h:75
const math::Matrix3d & getMatRot() const
access to the sphere parameters
Definition: Ellipsoid3d.h:333
const Point3dData< T > & center() const
access to the sphere parameters
Definition: Ellipsoid3d.h:277
ipReal64 _beta
orientation angle along the y axis
Definition: Ellipsoid3d.h:137
Lightweight structure used to store Point3d data.
Definition: GeometryEntity3dTypes.h:27
IPSDKMATH_API void ellipsoidPoint(const ipReal64 xc, const ipReal64 yc, const ipReal64 zc, const ipReal64 a, const ipReal64 b, const ipReal64 c, const Matrix3d &matRot, const ipReal64 theta, const ipReal64 phi, ipReal64 &ptX, ipReal64 &ptY, ipReal64 &ptZ)
function allowing to compute ellipsoid boundary point for a given angle
math::Matrix3d _matRot
orientation matrix associated to ellipsoid
Definition: Ellipsoid3d.h:143
IPSDKMATH_API ipReal64 ellipsoidArea(const ipReal64 a, const ipReal64 b, const ipReal64 c)
function allowing to compute ellipsoid area
void setOrientation(const ipReal64 chi, const ipReal64 beta, const ipReal64 alpha)
access to the sphere parameters
Definition: Ellipsoid3d.h:246