15 #ifndef __IPSDKGEOMETRY_CUBOID3D_H__ 16 #define __IPSDKGEOMETRY_CUBOID3D_H__ 20 #pragma warning (push) 21 #pragma warning (disable : 4251) 24 #include <IPSDKGeometry/Entity/3d/BaseTypedGeometryEntity3d.h> 25 #include <IPSDKGeometry/Entity/3d/Point/Point3d.h> 53 Cuboid3d(
const T xCenter,
const T yCenter,
const T zCenter,
const T halfLength,
const T halfWidth,
const T halfHeight,
const ipReal64 alpha,
const ipReal64 beta,
const ipReal64 chi);
68 inline void setCenter(
const Point3d<T>& centerPt);
69 inline void setCenter(
const T xCenter,
const T yCenter,
const T zCenter);
70 inline void setHalfLength(
const T halfLength);
71 inline void setHalfWidth(
const T halfWidth);
72 inline void setHalfHeight(
const T halfHeight);
73 inline void setAlpha(
const ipReal64 theta);
74 inline void setBeta(
const ipReal64 theta);
75 inline void setChi(
const ipReal64 theta);
76 inline T getHalfLength()
const;
77 inline T getHalfWidth()
const;
78 inline T getHalfHeight()
const;
79 inline T getLength()
const;
80 inline T getWidth()
const;
81 inline T getHeight()
const;
85 inline T centerX()
const;
86 inline T centerY()
const;
87 inline T centerZ()
const;
134 template <
typename T>
138 return g_coordinateSystem3dType;
141 template <
typename T>
145 return g_entity3dType;
148 template <
typename T>
152 _centerPt = centerPt;
155 template <
typename T>
162 template <
typename T>
166 _centerPt.setCoords(xCenter, yCenter, zCenter);
169 template <
typename T>
173 _halfLength = halfLength;
176 template <
typename T>
180 _halfWidth = halfWidth;
183 template <
typename T>
187 _halfHeight = halfHeight;
190 template <
typename T>
197 template <
typename T>
204 template <
typename T>
211 template <
typename T>
218 template <
typename T>
225 template <
typename T>
232 template <
typename T>
239 template <
typename T>
246 template <
typename T>
253 template <
typename T>
260 template <
typename T>
267 template <
typename T>
271 return 2*_halfLength;
274 template <
typename T>
281 template <
typename T>
285 return 2*_halfHeight;
288 template <
typename T>
295 template <
typename T>
302 template <
typename T>
309 template <
typename T>
314 const ipReal64 cosAlpha = std::cos(_alpha);
315 const ipReal64 sinAlpha = std::sin(_alpha);
316 const ipReal64 cosBeta = std::cos(_beta);
317 const ipReal64 sinBeta = std::sin(_beta);
318 const ipReal64 cosChi = std::cos(_chi);
319 const ipReal64 sinChi = std::sin(_chi);
321 const ipReal64 rxx = cosChi*cosBeta;
322 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
323 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
324 const ipReal64 ryx = sinChi*cosBeta;
325 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
326 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
328 const ipReal64 rzy = cosBeta*sinAlpha;
329 const ipReal64 rzz = cosBeta*cosAlpha;
331 const ipReal64 px = _centerPt._x+_halfWidth;
332 const ipReal64 py = _centerPt._y-_halfLength;
333 const ipReal64 pz = _centerPt._z-_halfHeight;
335 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
336 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
337 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
342 template <
typename T>
347 const ipReal64 cosAlpha = std::cos(_alpha);
348 const ipReal64 sinAlpha = std::sin(_alpha);
349 const ipReal64 cosBeta = std::cos(_beta);
350 const ipReal64 sinBeta = std::sin(_beta);
351 const ipReal64 cosChi = std::cos(_chi);
352 const ipReal64 sinChi = std::sin(_chi);
354 const ipReal64 rxx = cosChi*cosBeta;
355 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
356 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
357 const ipReal64 ryx = sinChi*cosBeta;
358 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
359 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
361 const ipReal64 rzy = cosBeta*sinAlpha;
362 const ipReal64 rzz = cosBeta*cosAlpha;
364 const ipReal64 px = _centerPt._x+_halfWidth;
365 const ipReal64 py = _centerPt._y+_halfLength;
366 const ipReal64 pz = _centerPt._z-_halfHeight;
368 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
369 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
370 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
375 template <
typename T>
380 const ipReal64 cosAlpha = std::cos(_alpha);
381 const ipReal64 sinAlpha = std::sin(_alpha);
382 const ipReal64 cosBeta = std::cos(_beta);
383 const ipReal64 sinBeta = std::sin(_beta);
384 const ipReal64 cosChi = std::cos(_chi);
385 const ipReal64 sinChi = std::sin(_chi);
387 const ipReal64 rxx = cosChi*cosBeta;
388 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
389 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
390 const ipReal64 ryx = sinChi*cosBeta;
391 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
392 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
394 const ipReal64 rzy = cosBeta*sinAlpha;
395 const ipReal64 rzz = cosBeta*cosAlpha;
397 const ipReal64 px = _centerPt._x+_halfWidth;
398 const ipReal64 py = _centerPt._y-_halfLength;
399 const ipReal64 pz = _centerPt._z+_halfHeight;
401 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
402 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
403 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
408 template <
typename T>
413 const ipReal64 cosAlpha = std::cos(_alpha);
414 const ipReal64 sinAlpha = std::sin(_alpha);
415 const ipReal64 cosBeta = std::cos(_beta);
416 const ipReal64 sinBeta = std::sin(_beta);
417 const ipReal64 cosChi = std::cos(_chi);
418 const ipReal64 sinChi = std::sin(_chi);
420 const ipReal64 rxx = cosChi*cosBeta;
421 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
422 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
423 const ipReal64 ryx = sinChi*cosBeta;
424 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
425 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
427 const ipReal64 rzy = cosBeta*sinAlpha;
428 const ipReal64 rzz = cosBeta*cosAlpha;
430 const ipReal64 px = _centerPt._x+_halfWidth;
431 const ipReal64 py = _centerPt._y+_halfLength;
432 const ipReal64 pz = _centerPt._z+_halfHeight;
434 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
435 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
436 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
441 template <
typename T>
446 const ipReal64 cosAlpha = std::cos(_alpha);
447 const ipReal64 sinAlpha = std::sin(_alpha);
448 const ipReal64 cosBeta = std::cos(_beta);
449 const ipReal64 sinBeta = std::sin(_beta);
450 const ipReal64 cosChi = std::cos(_chi);
451 const ipReal64 sinChi = std::sin(_chi);
453 const ipReal64 rxx = cosChi*cosBeta;
454 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
455 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
456 const ipReal64 ryx = sinChi*cosBeta;
457 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
458 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
460 const ipReal64 rzy = cosBeta*sinAlpha;
461 const ipReal64 rzz = cosBeta*cosAlpha;
463 const ipReal64 px = _centerPt._x-_halfWidth;
464 const ipReal64 py = _centerPt._y-_halfLength;
465 const ipReal64 pz = _centerPt._z-_halfHeight;
467 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
468 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
469 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
474 template <
typename T>
479 const ipReal64 cosAlpha = std::cos(_alpha);
480 const ipReal64 sinAlpha = std::sin(_alpha);
481 const ipReal64 cosBeta = std::cos(_beta);
482 const ipReal64 sinBeta = std::sin(_beta);
483 const ipReal64 cosChi = std::cos(_chi);
484 const ipReal64 sinChi = std::sin(_chi);
486 const ipReal64 rxx = cosChi*cosBeta;
487 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
488 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
489 const ipReal64 ryx = sinChi*cosBeta;
490 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
491 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
493 const ipReal64 rzy = cosBeta*sinAlpha;
494 const ipReal64 rzz = cosBeta*cosAlpha;
496 const ipReal64 px = _centerPt._x-_halfWidth;
497 const ipReal64 py = _centerPt._y+_halfLength;
498 const ipReal64 pz = _centerPt._z-_halfHeight;
500 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
501 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
502 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
507 template <
typename T>
512 const ipReal64 cosAlpha = std::cos(_alpha);
513 const ipReal64 sinAlpha = std::sin(_alpha);
514 const ipReal64 cosBeta = std::cos(_beta);
515 const ipReal64 sinBeta = std::sin(_beta);
516 const ipReal64 cosChi = std::cos(_chi);
517 const ipReal64 sinChi = std::sin(_chi);
519 const ipReal64 rxx = cosChi*cosBeta;
520 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
521 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
522 const ipReal64 ryx = sinChi*cosBeta;
523 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
524 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
526 const ipReal64 rzy = cosBeta*sinAlpha;
527 const ipReal64 rzz = cosBeta*cosAlpha;
529 const ipReal64 px = _centerPt._x-_halfWidth;
530 const ipReal64 py = _centerPt._y-_halfLength;
531 const ipReal64 pz = _centerPt._z+_halfHeight;
533 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
534 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
535 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
540 template <
typename T>
545 const ipReal64 cosAlpha = std::cos(_alpha);
546 const ipReal64 sinAlpha = std::sin(_alpha);
547 const ipReal64 cosBeta = std::cos(_beta);
548 const ipReal64 sinBeta = std::sin(_beta);
549 const ipReal64 cosChi = std::cos(_chi);
550 const ipReal64 sinChi = std::sin(_chi);
552 const ipReal64 rxx = cosChi*cosBeta;
553 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
554 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
555 const ipReal64 ryx = sinChi*cosBeta;
556 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
557 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
559 const ipReal64 rzy = cosBeta*sinAlpha;
560 const ipReal64 rzz = cosBeta*cosAlpha;
562 const ipReal64 px = _centerPt._x-_halfWidth;
563 const ipReal64 py = _centerPt._y+_halfLength;
564 const ipReal64 pz = _centerPt._z+_halfHeight;
566 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
567 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
568 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
580 #pragma warning (pop) 582 #endif // __IPSDKGEOMETRY_CUBOID3D_H__ ipReal64 getAlpha() const
access to the cuboid parameters
Definition: Cuboid3d.h:290
ipReal64 getChi() const
access to the cuboid parameters
Definition: Cuboid3d.h:304
void setAlpha(const ipReal64 theta)
access to the cuboid parameters
Definition: Cuboid3d.h:192
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
void setHalfHeight(const T halfHeight)
access to the cuboid parameters
Definition: Cuboid3d.h:185
Point3dData< T > bottomLeftFrontCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:377
void setBeta(const ipReal64 theta)
access to the cuboid parameters
Definition: Cuboid3d.h:199
eCoordinateSystem3dType
Enumerate describing coordinate system 3d type.
Definition: GeometryEntity3dTypes.h:74
Point class associated to cartesian 3d coordinates.
Definition: GeometryEntity3dTypes.h:29
#define IPSDK_DECLARE_GEOMETRY_ENTITY_3D(libraryName, className)
Macro allowing to declare a geometry entity 3d.
Definition: GeometryEntity3dHdrMacros.h:131
T _halfHeight
half height of the cuboid
Definition: Cuboid3d.h:118
T getHalfLength() const
access to the cuboid parameters
Definition: Cuboid3d.h:248
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
ipReal64 _chi
orientation angle along the z axis
Definition: Cuboid3d.h:127
eCoordinateSystem3dType getCoordinateSystem3dType() const
method allowing to retrieve coordinate system 3d type
Definition: Cuboid3d.h:136
Cuboid.
Definition: GeometryEntity3dTypes.h:54
const Point3dData< T > & getCoords() const
access to point coordinates
Definition: Point3d.h:142
eEntity3dType getEntity3dType() const
method allowing to retrieve entity 3d type
Definition: Cuboid3d.h:143
Point3dData< T > bottomLeftBackCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:509
T _halfWidth
half width of the cuboid
Definition: Cuboid3d.h:115
Definition of import/export macro for library.
ipReal64 _alpha
orientation angle along the x axis
Definition: Cuboid3d.h:121
Point3dData< T > topRightFrontCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:344
#define IPSDKGEOMETRY_API
Import/Export macro for library IPSDKGeometry.
Definition: IPSDKGeometryExports.h:25
T centerX() const
access to the cuboid parameters
Definition: Cuboid3d.h:213
Point3dData< T > topLeftBackCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:443
ipReal64 _beta
orientation angle along the y axis
Definition: Cuboid3d.h:124
void setHalfWidth(const T halfWidth)
access to the cuboid parameters
Definition: Cuboid3d.h:178
Point3dData< T > topLeftFrontCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:311
T getWidth() const
access to the cuboid parameters
Definition: Cuboid3d.h:276
eEntity3dType
Enumerate describing entity 3d type.
Definition: GeometryEntity3dTypes.h:38
T getLength() const
access to the cuboid parameters
Definition: Cuboid3d.h:269
T getHalfHeight() const
access to the cuboid parameters
Definition: Cuboid3d.h:262
Point3dData< T > bottomRightFrontCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:410
Point3dData< T > _centerPt
center of the cube
Definition: Cuboid3d.h:109
T getHeight() const
access to the cuboid parameters
Definition: Cuboid3d.h:283
T centerY() const
access to the cuboid parameters
Definition: Cuboid3d.h:220
void setChi(const ipReal64 theta)
access to the cuboid parameters
Definition: Cuboid3d.h:206
void setHalfLength(const T halfLength)
access to the cuboid parameters
Definition: Cuboid3d.h:171
3d cuboid (rectangular parallelepiped) class associated to cartesian 3d coordinates ...
Definition: Cuboid3d.h:35
T getHalfWidth() const
access to the cuboid parameters
Definition: Cuboid3d.h:255
Base class for typed 3d geometry entities.
Definition: BaseTypedGeometryEntity3d.h:27
T _halfLength
half length of the cuboid
Definition: Cuboid3d.h:112
Cartesian coordinate system.
Definition: GeometryEntity3dTypes.h:76
Point3dData< T > topRightBackCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:476
ipReal64 getBeta() const
access to the cuboid parameters
Definition: Cuboid3d.h:297
const Point3dData< T > & center() const
access to the cuboid parameters
Definition: Cuboid3d.h:234
Lightweight structure used to store Point3d data.
Definition: GeometryEntity3dTypes.h:27
T centerZ() const
access to the cuboid parameters
Definition: Cuboid3d.h:227
Basic operators used for cuboid 3d management.
Point3dData< T > bottomRightBackCorner() const
compute cuboid corners coordinates For instance, the topLeftFrontCorner() method calculates the squar...
Definition: Cuboid3d.h:542
void setCenter(const Point3dData< T > ¢erPt)
access to the cuboid parameters
Definition: Cuboid3d.h:150