Simpact Cyan
Population based event driven simulation using mNRM
discretedistribution2d.h
1 #ifndef DISCRETEDISTRIBUTION2D_H
2 
3 #define DISCRETEDISTRIBUTION2D_H
4 
6 #include "discretedistribution.h"
7 #include "discretedistributionfast.h"
8 #include "polygon2d.h"
9 #include <vector>
10 
11 class GridValues;
12 
13 //#define OLDTEST
14 
15 class DiscreteDistribution2D : public ProbabilityDistribution2D
16 {
17 public:
18  DiscreteDistribution2D(double xOffset, double yOffset, double xSize, double ySize,
19  const GridValues &density, bool floor, GslRandomNumberGenerator *pRngGen,
20  const Polygon2D &filter = Polygon2D()
21  );
22  ~DiscreteDistribution2D();
23 
24  Point2D pickPoint() const;
25 
26  double pickMarginalX() const;
27  double pickMarginalY() const;
28  double pickConditionalOnX(double x) const;
29  double pickConditionalOnY(double y) const;
30 
31  double getXOffset() const { return m_xOffset; }
32  double getYOffset() const { return m_yOffset; }
33  double getXSize() const { return m_xSize; }
34  double getYSize() const { return m_ySize; }
35 
36  bool isYFlipped() const { return m_flippedY; }
37  bool getFloor() const { return m_floor; }
38 private:
39  static void generateConditionalsAndMarginal(double xOffset, double yOffset, double xSize, double ySize,
40  const GridValues &density, GslRandomNumberGenerator *pRngGen,
41  const Polygon2D &filter, bool transpose,
42 #ifdef OLDTEST
43  std::vector<DiscreteDistribution *> &conditionals,
44  DiscreteDistribution **ppMarginal
45 #else
46  std::vector<DiscreteDistributionFast *> &conditionals,
47  DiscreteDistributionFast **ppMarginal
48 #endif
49  );
50 #ifdef OLDTEST
51  DiscreteDistribution *m_pMarginalXDist;
52  DiscreteDistribution *m_pMarginalYDist;
53  std::vector<DiscreteDistribution *> m_conditionalXDists;
54  std::vector<DiscreteDistribution *> m_conditionalYDists;
55 #else
56  DiscreteDistributionFast *m_pMarginalXDist;
57  DiscreteDistributionFast *m_pMarginalYDist;
58  std::vector<DiscreteDistributionFast *> m_conditionalXDists;
59  std::vector<DiscreteDistributionFast *> m_conditionalYDists;
60 #endif
61  double m_xOffset, m_yOffset;
62  double m_xSize, m_ySize;
63  int m_width, m_height; // discrete size (pixels)
64  bool m_flippedY;
65  bool m_floor;
66 };
67 
68 #endif // DISCRETEDISTRIBUTION2D_H
virtual Point2D pickPoint() const =0
Pick a point according to a specific distrubution, specified in a subclass of ProbabilityDistribution...
Helper class to generate random numbers based on some kind of discrete distribution.
Definition: discretedistribution.h:20
This class allows you to generate random numbers, and uses the GNU Scientific Library for this...
Definition: gslrandomnumbergenerator.h:16
Abstract base class for 2D probability distribution implementations so that they can be used intercha...
Definition: probabilitydistribution2d.h:17
This class can be used to represent a polygon.
Definition: polygon2d.h:10