Helios++
Helios software for LiDAR simulations
LadLut.h
1 #pragma once
2 
3 #include <vector>
4 #include <glm/glm.hpp>
5 #include <boost/serialization/base_object.hpp>
6 #include <boost/serialization/shared_ptr.hpp>
7 
13 class LadLut{
14  // *** SERIALIZATION *** //
15  // *********************** //
16  friend class boost::serialization::access;
17  template<class Archive>
18  void serialize(Archive &ar, const unsigned int version)
19  {
20  ar & X;
21  ar & Y;
22  ar & Z;
23  ar & G;
24  ar & angles;
25  }
26 public:
27  // *** CONSTANTS *** //
28  // ******************* //
34  static const double eps;
35 
36  // *** ATTRIBUTES *** //
37  // ******************** //
41  std::vector<double> X;
45  std::vector<double> Y;
49  std::vector<double> Z;
53  std::vector<double> G;
58  std::vector<double> angles;
59 
60  // *** CONSTRUCTION / DESTRUCTION *** //
61  // ************************************ //
65  LadLut() = default;
66  LadLut(LadLut &ll);
67  virtual ~LadLut() = default;
68 
69  // *** M E T H O D S *** //
70  // *********************** //
75  void computeAngles();
79  double computeSigma(double padBVTotal, glm::dvec3 direction)
80  {return computeSigma(padBVTotal, direction.x, direction.y, direction.z);}
81 
95  double computeSigma(double padBVTotal, double x, double y, double z);
96 
100  double interpolate(glm::dvec3 direction)
101  {return interpolate(direction.x, direction.y, direction.z);}
137  double interpolate(double x, double y, double z);
138 
139  // *** INNER METHODS *** //
140  // *********************** //
152  double a, double b, double c,
153  double &x, double &y, double &z
154  );
165  inline void fastTransformToLadLutDomain(
166  double a, double b, double c,
167  double &x, double &y, double &z
168  );
187  double wx, double wy, double wz,
188  size_t &uIdx, double &ux, double &uy, double &uz,
189  size_t &vIdx, double &vx, double &vy, double &vz,
190  double &a, double &b
191  );
192 };
Leaf Angle Distribution Look-Up Table.
Definition: LadLut.h:13
std::vector< double > Y
Y component of normalized director vector for each record.
Definition: LadLut.h:45
std::vector< double > G
Function evaluation for each record.
Definition: LadLut.h:53
double computeSigma(double padBVTotal, glm::dvec3 direction)
Definition: LadLut.h:79
double interpolate(glm::dvec3 direction)
Definition: LadLut.h:100
void findEnvelopmentDirections(double wx, double wy, double wz, size_t &uIdx, double &ux, double &uy, double &uz, size_t &vIdx, double &vx, double &vy, double &vz, double &a, double &b)
Find the vector immediately after ( ) and the one immediately before ( )
Definition: LadLut.cpp:94
void computeAngles()
Compute angles.
Definition: LadLut.cpp:20
std::vector< double > angles
The angle for each director vector with respect to .
Definition: LadLut.h:58
std::vector< double > X
X component of normalized director vector for each record.
Definition: LadLut.h:41
void transformToLadLutDomain(double a, double b, double c, double &x, double &y, double &z)
Transform a vector from standard domain to a vector in LadLut domain.
Definition: LadLut.cpp:65
LadLut()=default
LadLut default constructor.
static const double eps
Used to consider decimal precision. Two values will be treated as equal when the difference between t...
Definition: LadLut.h:34
void fastTransformToLadLutDomain(double a, double b, double c, double &x, double &y, double &z)
Fast verision of transformToLadLutDomain function.
Definition: LadLut.cpp:85
std::vector< double > Z
Z component of normalized director vector for each record.
Definition: LadLut.h:49