VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
terrainReasonerAlgos.h
Go to the documentation of this file.
1 #pragma once
2 #include <vector>
3 using namespace std;
4 
15 {
16 public:
17  DtTopoPoint(double _x, double _y, double _z) : mx(_x), my(_y), mz(_z) {}
19  inline double x() const { return mx; }
20  inline void setX(double _x) { mx = _x; }
21  inline double y() const { return my; }
22  inline void setY(double _y) { my = _y; }
23  inline double z() const { return mz; }
24  inline void setZ(double _z) { mz = _z; }
25 private:
26  double mx;
27  double my;
28  double mz;
29 };
30 
36 {
40  double grade;
41  vector<bool> covered;
42 };
43 
45 class DtArea;
46 class DtIntMatrix;
47 class DtIntMatrixSlice;
48 
55 
57 {
58 public:
60  static bool SolveHilltops(const DtIntMatrix& grid, int prominenceSpan, int prominence,
61  vector<int>& hilltopX, vector<int>& hilltopY, vector<int>& groupIndex);
62 
64  static void LocatePositions(const DtArea& area, int sampleFactor,
65  const DtTopoPoint& domPoint, int posCount,
66  int lateralSpacing, int lateralInterval, int lateralRange,
67  int metersFire, int metersCover, int interval,
68  double heightFire, double heightCover, double heightTo,
69  double maxSlopeDegrees,
70  const DtHostQueryInterface& losChecker,
71  vector<DtTopoPoint>& samplePoints, vector<DtGradeResult>& fireResult, vector<DtGradeResult>& coverResult);
72 
75  static double GradeCoverage(const DtTopoPoint& pointFrom, double heightFrom,
76  const vector<DtTopoPoint>& samplePoints, double heightTo, const DtHostQueryInterface& losChecker,
77  vector<bool>& covered);
78 
79  static void SelectGrades(vector<int>& grades, int selectCount, int spacing, vector<int>& selected);
80 
86  static void FindPotentialPositionsAlongCrossSection(
87  const DtTopoPoint& originPoint,
88  double originHeightMeters,
89  const DtTopoPoint& endPoint,
90  double startCheckOffsetMeters,
91  double startSearchOffsetMeters,
92  double searchIntervalMeters,
93  double viewHeightMeters,
94  double coverHeightMeters,
95  double coverRangeMeters,
96  const DtHostQueryInterface& losChecker,
97  vector<DtTopoPoint>& viewPoints, vector<DtTopoPoint>& coverPoints);
98 
102  static void FindPotentialPositionsInArea(
103  const DtArea& searchArea,
104  const DtArea& targetsArea,
105  unsigned int targetsAreaSampleCount,
106  double lateralIntervalMeters,
107  double verticalIntervalMeters,
108  double targetHeightMeters,
109  double viewHeightMeters,
110  double coverHeightMeters,
111  double coverRangeMeters,
112  const DtHostQueryInterface& losChecker,
113  DtTopoPoint& targetAreaCenter, vector<DtTopoPoint>& viewPoints, vector<DtTopoPoint>& coverPoints);
114 
118  static void ClusterPotentialPositions(
119  const DtTopoPoint& targetCenter,
120  const vector<DtTopoPoint>& viewPoints,
121  const vector<DtTopoPoint>& coverPoints,
122  double maxGroupWidth,
123  double maxGroupDepth,
124  vector<DtArea>& clusters,
125  vector<DtTopoPoint>& clusterCenters,
126  vector<double>& clusterDepths,
127  vector<double>& clusterWidths);
128 
129 private:
130  friend class DtTerrainReasonerTester;
131 
138  static void ConvertAreasToCrossSections(
139  const DtArea& searchArea,
140  const DtArea& targetsArea,
141  unsigned int targetsAreaSampleCount,
142  double lateralIntervalMeters,
143  DtTopoPoint& originPoint,
144  vector<double>& startCheckOffsetMeters,
145  vector<double>& startSearchOffsetMeters,
146  const DtHostQueryInterface& losChecker,
147  vector<DtTopoPoint>& endPoints);
148 
150  static bool DtTerrainReasonerAlgos::PointInside(const DtTopoPoint& pt, const DtTopoPoint& fromP, const DtTopoPoint& toP);
151  static bool DtTerrainReasonerAlgos::LineIntersection(const DtTopoPoint& from1, const DtTopoPoint& to1, const DtTopoPoint& from2, const DtTopoPoint& to2, DtTopoPoint& intersection);
152  static void DtTerrainReasonerAlgos::LineAreaIntersection(const DtTopoPoint& fromLine, const DtTopoPoint& toLine, DtArea area, vector<DtTopoPoint>& intersectionVec);
153 
158  static int ProminenceCircle(int radius, DtIntMatrix& circle);
159 
160  static void FindPeaks(const DtIntMatrixSlice& slice, vector<int>& indices);
161 
162  static void GradeSinglePosition(const vector<DtTopoPoint>& samplePoints, const DtTopoPoint& areaCenter,
163  const DtTopoPoint& position,
164  int metersFire, int metersCover, int interval,
165  double heightFire, double heightCover, double heightTo,
166  double maxSlopeDegrees,
167  const DtHostQueryInterface& _losChecker,
168  DtGradeResult& fireResult, DtGradeResult& coverResult);
169  static void SelectGradesImp(vector<int>& grades, int fromInd, int toInd,
170  vector<int>& indices, int top,
171  int selectCount, int spacing, vector<int>& selected);
172 };
173 
180 
182 {
183 public:
184  virtual bool checkLineOfSight(double topoFromX, double topoFromY, double heightAboveFrom,
185  double topoToX, double topoToY, double heightAboveTo) const = 0;
186  virtual double getHeight(double topoX, double topoY) const = 0;
187 };
188 
190 {
191 public:
192  GroupMatch() : mNextSet(1) { mTranslation.push_back(0); }
193  void RecordMatch(int i, int j);
194  void Translate(vector<int>& _translation);
195  int NextSet();
196 private:
197  int mNextSet;
198  vector<int> mTranslation;
199 };
200 
202 {
203 public:
204  DtSectorCommon(const DtTopoPoint& origin, double maxWidth, double maxDepth);
205  const DtTopoPoint& OriginPoint() const {return originPoint;}
206  double MaxGroupWidth() const { return maxGroupWidth; }
207  double MaxGroupDepth() const { return maxGroupDepth; }
208 private:
212 };
213 
214 class DtSector
215 {
216 public:
217  DtSector(const DtSectorCommon& common, double degree = 0, double fireDistance = 0, double coverDistance = 0);
218  double AddPosition(double degree, double fireDistance, double coverDistance, DtSector& result);
219  bool Overlapps(const DtSector& other) const;
220  DtArea ContainingRectangle() const;
221  DtTopoPoint Center() const;
222  double Width() const;
223  double Depth() const { return maxDistance - minDistance; }
224 private:
226  double minDegree;
227  double maxDegree;
228  double minDistance;
229  double maxDistance;
230 };
231 
double z() const
Definition: terrainReasonerAlgos.h:23
Definition: terrainReasonerAlgos.h:214
int verticalIndex
Definition: terrainReasonerAlgos.h:38
const DtTopoPoint & OriginPoint() const
Definition: terrainReasonerAlgos.h:205
int mNextSet
Definition: terrainReasonerAlgos.h:197
void setZ(double _z)
Definition: terrainReasonerAlgos.h:24
voidpf uLong int origin
Definition: ioapi.h:42
double MaxGroupWidth() const
Definition: terrainReasonerAlgos.h:206
double my
Definition: terrainReasonerAlgos.h:27
GroupMatch()
Definition: terrainReasonerAlgos.h:192
DtTopoPoint()
Definition: terrainReasonerAlgos.h:18
DtTopoPoint(double _x, double _y, double _z)
Definition: terrainReasonerAlgos.h:17
double MaxGroupDepth() const
Definition: terrainReasonerAlgos.h:207
double maxGroupDepth
Definition: terrainReasonerAlgos.h:211
This class represents a topographic coordinate. It has the exact same interface as DtVector...
Definition: terrainReasonerAlgos.h:14
double Depth() const
Definition: terrainReasonerAlgos.h:223
This class services DtTerrainReasoner. It contains actual implementations of the algorithms used for ...
Definition: terrainReasonerAlgos.h:56
double mx
Definition: terrainReasonerAlgos.h:26
static void LineAreaIntersection(const DtTopoPoint &fromLine, const DtTopoPoint &toLine, DtArea area, vector< DtTopoPoint > &intersectionVec)
Definition: terrainReasonerAlgos.h:201
double minDegree
Definition: terrainReasonerAlgos.h:226
DtTopoPoint originPoint
Definition: terrainReasonerAlgos.h:209
double y() const
Definition: terrainReasonerAlgos.h:21
DtSectorCommon common
Definition: terrainReasonerAlgos.h:225
This interface represents the host from the perspective of DtTerrainReasonerAlgos. The host is an &quot;owner&quot; of a topographic terrain. This allows DtTerrainReasonerAlgos to be completely ignorant of the fact that actual terrain access requires conversion between topographic and local coordinates, keeping DtTerrainReasonerAlgos detached from VRF code base.
Definition: terrainReasonerAlgos.h:181
This struct represent a view (AKA fire) point or cover point that was graded (0.0 - 100...
Definition: terrainReasonerAlgos.h:35
double grade
Definition: terrainReasonerAlgos.h:40
double x() const
Definition: terrainReasonerAlgos.h:19
DtTopoPoint point
Definition: terrainReasonerAlgos.h:39
Definition: terrainReasonerAlgos.h:189
Definition: terrainUtility.h:14
vector< int > mTranslation
Definition: terrainReasonerAlgos.h:198
DT_DLL_vrfutil bool intersection(const DtRailSegment *currentSegment, const DtRailSegment *nextSegment)
Given two segments, determine if where they meet is an intersection or just a bend in the road...
static bool PointInside(const DtTopoPoint &pt, const DtTopoPoint &fromP, const DtTopoPoint &toP)
This group of methods provide some basic geometric operations.
vector< bool > covered
Definition: terrainReasonerAlgos.h:41
Definition: terrainUtility.h:40
void setX(double _x)
Definition: terrainReasonerAlgos.h:20
double maxDistance
Definition: terrainReasonerAlgos.h:229
Definition: terrainUtility.h:23
void setY(double _y)
Definition: terrainReasonerAlgos.h:22
double maxGroupWidth
Definition: terrainReasonerAlgos.h:210
double minDistance
Definition: terrainReasonerAlgos.h:228
int lateralIndex
Definition: terrainReasonerAlgos.h:37
double maxDegree
Definition: terrainReasonerAlgos.h:227
double mz
Definition: terrainReasonerAlgos.h:28
static bool LineIntersection(const DtTopoPoint &from1, const DtTopoPoint &to1, const DtTopoPoint &from2, const DtTopoPoint &to2, DtTopoPoint &intersection)

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)