iLand
hemigrid.h
Go to the documentation of this file.
1//---------------------------------------------------------------------------
2
3#ifndef HemiGrid_H
4#define HemiGrid_H
5
13{
14 public:
15 HemiGrid(): mMatrix(0), mMatrixCountAzimuth(-1),
16 mMatrixCountElevation(-1) {}
17 ~HemiGrid() { if (mMatrix) delete[] mMatrix; }
18 HemiGrid(const HemiGrid& grid) { setup(mCellSizeDegree); modify(grid, HemiGrid::SetTo); }
19
20 void setup(double cellsize_degree);
21 void clear(double SetWith = 0.);
22 //void DumpGrid(TStrings* List);
23
24 double& rGetByIndex(const int iAzimuth, const int iElevation) const;
25 double& rGet(const double Azimuth, const double Elevation) const;
26
28 int indexAzimuth(double Azimuth) const { int x=int( (Azimuth + M_PI) / (2.*M_PI) * mMatrixCountAzimuth ); if (x==mMatrixCountAzimuth) --x; return x;}
30 int indexElevation(double Elevation) const { int x=int( Elevation / (M_PI / 2.) * mMatrixCountElevation ); if (x==mMatrixCountElevation) --x; return x;}
31
33 double azimuth(const int iAzimuth) { return iAzimuth/double(mMatrixCountAzimuth) * M_PI*2 - M_PI; }
35 double azimuthNorth(const int iAzimuth) { double d = iAzimuth/double(mMatrixCountAzimuth) * M_PI*2 - M_PI/2.; return d; }
37 double elevation(const int iElevation) { return iElevation/double(mMatrixCountElevation) * M_PI_2; }
38
39 int matrixCountAzimuth() const { return mMatrixCountAzimuth; }
40 int matrixCountElevation() const { return mMatrixCountElevation; }
42 void matrixMinMax(double &rMatrixMin, double &rMatrixMax) const;
44 double sum(const double elevation=0) const;
45
46 static void projectLine(const double &x, const double &y, const double &deltah, const double &r,
47 double &elevation, double &azimuth1, double &azimuth2);
48
55 void modify(const HemiGrid &Source, const ModifyMode mode);
56
57 void projectCylinder(const double &deltax, const double &deltay,
58 const double &offsetz, const double &height, const double &r,
59 const ModifyMode mode, const double &value);
60 void modifyAngleRect( const double &elow, const double &alow1, const double &alow2,
61 const double &ehigh, const double &ahigh1, const double &ahigh2,
62 const ModifyMode mode, const double &value);
63 double getSum(const HemiGrid *Weighter=NULL) const;
64 // drawing/output
65 void paintGrid(QImage &image) const;
66 QString dumpGrid() const;
67
68 private:
69 double* mMatrix;
70 int mMatrixCountAzimuth;
71 int mMatrixCountElevation;
72 double mMatrixCellSize;
73 double mCellSizeDegree;
74};
75
76//---------------------------------------------------------------------------
77#endif
HemiGrid represents a grid covering the hemisphehre as well as some operations.
Definition: hemigrid.h:13
double getSum(const HemiGrid *Weighter=NULL) const
retrieve total sum of the hemigrid.
Definition: hemigrid.cpp:129
static void projectLine(const double &x, const double &y, const double &deltah, const double &r, double &elevation, double &azimuth1, double &azimuth2)
Definition: hemigrid.cpp:148
void clear(double SetWith=0.)
Definition: hemigrid.cpp:35
void setup(double cellsize_degree)
Definition: hemigrid.cpp:14
void modify(const HemiGrid &Source, const ModifyMode mode)
combine two Hemigrids.
Definition: hemigrid.cpp:115
~HemiGrid()
Definition: hemigrid.h:17
double & rGetByIndex(const int iAzimuth, const int iElevation) const
Definition: hemigrid.cpp:90
void matrixMinMax(double &rMatrixMin, double &rMatrixMax) const
get mininum and maximum value in the grid.
Definition: hemigrid.cpp:44
double & rGet(const double Azimuth, const double Elevation) const
Definition: hemigrid.cpp:105
void projectCylinder(const double &deltax, const double &deltay, const double &offsetz, const double &height, const double &r, const ModifyMode mode, const double &value)
Definition: hemigrid.cpp:205
HemiGrid(const HemiGrid &grid)
Definition: hemigrid.h:18
double azimuthNorth(const int iAzimuth)
get azimuth angle associated with given index.
Definition: hemigrid.h:35
void paintGrid(QImage &image) const
Definition: hemigrid.cpp:220
double azimuth(const int iAzimuth)
get azimuth angle associated with given index.
Definition: hemigrid.h:33
ModifyMode
Definition: hemigrid.h:49
@ Add
Definition: hemigrid.h:49
@ SetTo
Definition: hemigrid.h:49
@ Multiply
Definition: hemigrid.h:49
int indexAzimuth(double Azimuth) const
get azimuth index of given azimuth angle. angle should be -pi .. pi.
Definition: hemigrid.h:28
int matrixCountAzimuth() const
Definition: hemigrid.h:39
void modifyAngleRect(const double &elow, const double &alow1, const double &alow2, const double &ehigh, const double &ahigh1, const double &ahigh2, const ModifyMode mode, const double &value)
Definition: hemigrid.cpp:170
HemiGrid()
Definition: hemigrid.h:15
int indexElevation(double Elevation) const
get index of elevation (0..pi/2)
Definition: hemigrid.h:30
double elevation(const int iElevation)
get elevation angle associated with given index.
Definition: hemigrid.h:37
double sum(const double elevation=0) const
get sum of all cell values with elevation >= "elevation".
Definition: hemigrid.cpp:56
int matrixCountElevation() const
Definition: hemigrid.h:40
QString dumpGrid() const
Definition: hemigrid.cpp:254