Helios++
Helios software for LiDAR simulations
DiscreteTime.h
1 #pragma once
2 
3 #include <cstdlib>
4 #define _USE_MATH_DEFINES
5 #include <cmath>
6 
17 protected:
18  // *** ATTRIBUTES *** //
19  // ******************** //
26  std::size_t frequency;
32  double freq;
41  double period;
53  double periodScale;
58  double freqScale;
65  std::size_t scaledFrequency;
70  double scaledFreq;
74  double scaledPeriod;
75 
76 public:
77  // *** CONSTRUCTION / DESTRUCTION *** //
78  // ************************************ //
84  std::size_t const frequency,
85  double const periodScale=1.0
86  );
87  virtual ~DiscreteTime() = default;
88 
89  // *** TRANSFORMS *** //
90  // ******************** //
100  virtual std::size_t toDiscrete(double const time) const;
109  virtual std::size_t toCyclicDiscrete(double const time) const;
117  virtual std::size_t toPeriodicDiscrete(double const time) const;
126  virtual double toContinuous(std::size_t const step) const;
134  virtual double toCyclicContinuous(std::size_t const step) const;
142  virtual double toPeriodicContinuous(std::size_t const step) const;
143 
144 
145  // *** GETTERs and SETTERs *** //
146  // ***************************** //
153  inline std::size_t getFrequency() const {return frequency;}
160  inline void setFrequency(std::size_t const frequency) {
161  this->frequency = frequency;
162  this->freq = (double) frequency;
163  this->period = 1.0/(this->freq);
164  setPeriodScale(getPeriodScale()); // Update scaled frequencies
165  }
170  inline double getPeriod() const {return period;}
176  inline double getPeriodScale() const {return periodScale;}
182  inline void setPeriodScale(double const periodScale){
183  this->periodScale = periodScale;
184  this->freqScale = 1.0/periodScale;
185  this->scaledFreq = periodScale*freq;
186  this->scaledFrequency = (size_t) std::ceil(this->scaledFreq);
187  this->scaledPeriod = period/scaledFreq;
188  }
189 };
Class to handle discrete time. It supports transforming from continuous time to discrete time and als...
Definition: DiscreteTime.h:16
double period
Decimal representation of the period .
Definition: DiscreteTime.h:41
double periodScale
The period scale defining the period length. If it is 1.0, then it means periodic and cyclic transfo...
Definition: DiscreteTime.h:53
std::size_t scaledFrequency
How many iterations applying period scale . It is, .
Definition: DiscreteTime.h:65
double scaledFreq
Decimal representation of the scaled frequency .
Definition: DiscreteTime.h:70
double freqScale
Simply the inverse of period scale .
Definition: DiscreteTime.h:58
double freq
Decimal representation of the frequency .
Definition: DiscreteTime.h:32
std::size_t frequency
The frequency defining the discrete time. It is, how many iterations per second.
Definition: DiscreteTime.h:26