Helios++
Helios software for LiDAR simulations
RigidMotionR3Factory.h
1 #pragma once
2 
3 #include <rigidmotion/RigidMotionFactory.h>
4 
5 #include <armadillo>
6 #include <boost/serialization/base_object.hpp>
7 #include <boost/serialization/void_cast.hpp>
8 
9 using namespace arma;
10 
11 namespace rigidmotion{
12 
23 private:
24  // *** SERIALIZATION *** //
25  // *********************** //
26  friend class boost::serialization::access;
35  template <typename Archive>
36  void serialize(Archive &ar, const unsigned int version){
37  boost::serialization::void_cast_register<
40  >();
41  ar &boost::serialization::base_object<RigidMotionFactory>(*this);
42  }
43 
44 protected:
45  // *** CONSTANTS *** //
46  // ******************* //
50  static double const eps;
64  static arma::mat const canonicalReflection;
65 
66 public:
67 
68  // *** CONSTRUCTION / DESTRUCTION *** //
69  // ************************************ //
73  RigidMotionR3Factory() = default;
74  virtual ~RigidMotionR3Factory() = default;
75 
76  // *** RIGID MOTION FACTORY METHODS *** //
77  // ************************************** //
82  RigidMotion makeIdentity() const override;
88  RigidMotion makeTranslation(colvec const shift) const override;
135  virtual RigidMotion makeReflection(colvec const ortho) const ;
152  virtual RigidMotion makeReflectionFast(colvec const orthonormal) const;
170  virtual RigidMotion makeReflectionFast(
171  colvec const u,
172  colvec const alpha,
173  colvec const beta
174  ) const;
182  virtual RigidMotion makeReflectionX() const;
190  virtual RigidMotion makeReflectionY() const;
198  virtual RigidMotion makeReflectionZ() const;
220  virtual RigidMotion makeGlideReflection(
221  colvec const ortho,
222  colvec const shift
223  ) const;
240  virtual RigidMotion makeGlideReflectionFast(
241  colvec const orthonormal,
242  colvec const shift
243  ) const;
272  virtual RigidMotion makeRotation(
273  colvec const axis,
274  double const theta
275  ) const;
288  virtual RigidMotion makeRotationFast(
289  colvec const axis,
290  double const theta
291  ) const;
298  virtual RigidMotion makeRotationX(double const theta) const;
305  virtual RigidMotion makeRotationY(double const theta) const;
312  virtual RigidMotion makeRotationZ(double const theta) const;
331  virtual RigidMotion makeHelical(
332  colvec const axis,
333  double const theta,
334  double const glide
335  ) const;
350  virtual RigidMotion makeHelicalFast(
351  colvec const axis,
352  double const theta,
353  double const glide
354  ) const;
362  virtual RigidMotion makeHelicalX(
363  double const theta,
364  double const glide
365  ) const;
373  virtual RigidMotion makeHelicalY(
374  double const theta,
375  double const glide
376  ) const;
384  virtual RigidMotion makeHelicalZ(
385  double const theta,
386  double const glide
387  ) const;
419  virtual RigidMotion makeRotationalSymmetry(
420  colvec const axis,
421  double const theta
422  ) const;
436  virtual RigidMotion makeRotationalSymmetryFast(
437  colvec const axis,
438  double const theta
439  ) const;
458  virtual RigidMotion makeRotationalSymmetry(
459  colvec const axis,
460  double const theta,
461  colvec const center
462  ) const;
478  virtual RigidMotion makeRotationalSymmetryFast(
479  colvec const axis,
480  double const theta,
481  colvec const center
482  ) const;
489  virtual RigidMotion makeRotationalSymmetryX(double const theta) const;
496  virtual RigidMotion makeRotationalSymmetryY(double const theta) const;
503  virtual RigidMotion makeRotationalSymmetryZ(double const theta) const;
504 };
505 }
Class that must be extended by any class which provides factory methods for rigid motions....
Definition: RigidMotionFactory.h:18
Class providing building methods for rigid motions in .
Definition: RigidMotionR3Factory.h:22
static arma::mat const canonicalReflection
The Jordan normal form of a reflection in .
Definition: RigidMotionR3Factory.h:64
static double const eps
Decimal precision tolerance.
Definition: RigidMotionR3Factory.h:50
RigidMotionR3Factory()=default
RigidMotionR3Factory default constructor.
void serialize(Archive &ar, const unsigned int version)
Serialize a rigid motion factory to a stream of bytes.
Definition: RigidMotionR3Factory.h:36
Interface that must be implemented by any class which represents a specific rigid motions.
Definition: RigidMotion.h:49