VR-Forces 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 
17 {
18 public:
19  DtTopoPoint(double _x, double _y, double _z) : mx(_x), my(_y), mz(_z) {}
21  inline double x() const { return mx; }
22  inline void setX(double _x) { mx = _x; }
23  inline double y() const { return my; }
24  inline void setY(double _y) { my = _y; }
25  inline double z() const { return mz; }
26  inline void setZ(double _z) { mz = _z; }
27 private:
28  double mx;
29  double my;
30  double mz;
31 };
32 
38 {
42  double grade;
43  vector<bool> covered;
44 };
45 
47 class DtArea;
48 class DtIntMatrix;
49 class DtIntMatrixSlice;
50 
57 
59 {
60 public:
62  static bool SolveHilltops(const DtIntMatrix& grid, int prominenceSpan, int prominence,
63  vector<int>& hilltopX, vector<int>& hilltopY, vector<int>& groupIndex);
64 
66  static void LocatePositions(const DtArea& area, int sampleFactor,
67  const DtTopoPoint& domPoint, int posCount,
68  int lateralSpacing, int lateralInterval, int lateralRange,
69  int metersFire, int metersCover, int interval,
70  double heightFire, double heightCover, double heightTo,
71  double maxSlopeDegrees,
72  const DtHostQueryInterface& losChecker,
73  vector<DtTopoPoint>& samplePoints, vector<DtGradeResult>& fireResult, vector<DtGradeResult>& coverResult);
74 
77  static double GradeCoverage(const DtTopoPoint& pointFrom, double heightFrom,
78  const vector<DtTopoPoint>& samplePoints, double heightTo, const DtHostQueryInterface& losChecker,
79  vector<bool>& covered);
80 
81  static void SelectGrades(vector<int>& grades, int selectCount, int spacing, vector<int>& selected);
82 
88  static void FindPotentialPositionsAlongCrossSection(
89  const DtTopoPoint& originPoint,
90  double originHeightMeters,
91  const DtTopoPoint& endPoint,
92  double startCheckOffsetMeters,
93  double startSearchOffsetMeters,
94  double searchIntervalMeters,
95  double viewHeightMeters,
96  double coverHeightMeters,
97  double coverRangeMeters,
98  const DtHostQueryInterface& losChecker,
99  vector<DtTopoPoint>& viewPoints, vector<DtTopoPoint>& coverPoints);
100 
104  static void FindPotentialPositionsInArea(
105  const DtArea& searchArea,
106  const DtArea& targetsArea,
107  unsigned int targetsAreaSampleCount,
108  double lateralIntervalMeters,
109  double verticalIntervalMeters,
110  double targetHeightMeters,
111  double viewHeightMeters,
112  double coverHeightMeters,
113  double coverRangeMeters,
114  const DtHostQueryInterface& losChecker,
115  DtTopoPoint& targetAreaCenter, vector<DtTopoPoint>& viewPoints, vector<DtTopoPoint>& coverPoints);
116 
120  static void ClusterPotentialPositions(
121  const DtTopoPoint& targetCenter,
122  const vector<DtTopoPoint>& viewPoints,
123  const vector<DtTopoPoint>& coverPoints,
124  double maxGroupWidth,
125  double maxGroupDepth,
126  vector<DtArea>& clusters,
127  vector<DtTopoPoint>& clusterCenters,
128  vector<double>& clusterDepths,
129  vector<double>& clusterWidths);
130 
131 private:
132  friend class DtTerrainReasonerTester;
133 
140  static void ConvertAreasToCrossSections(
141  const DtArea& searchArea,
142  const DtArea& targetsArea,
143  unsigned int targetsAreaSampleCount,
144  double lateralIntervalMeters,
145  DtTopoPoint& originPoint,
146  vector<double>& startCheckOffsetMeters,
147  vector<double>& startSearchOffsetMeters,
148  const DtHostQueryInterface& losChecker,
149  vector<DtTopoPoint>& endPoints);
150 
152  static bool PointInside(const DtTopoPoint& pt, const DtTopoPoint& fromP, const DtTopoPoint& toP);
153  static bool LineIntersection(const DtTopoPoint& from1, const DtTopoPoint& to1, const DtTopoPoint& from2, const DtTopoPoint& to2, DtTopoPoint& intersection);
154  static void LineAreaIntersection(const DtTopoPoint& fromLine, const DtTopoPoint& toLine, DtArea area, vector<DtTopoPoint>& intersectionVec);
155 
160  static int ProminenceCircle(int radius, DtIntMatrix& circle);
161 
162  static void FindPeaks(const DtIntMatrixSlice& slice, vector<int>& indices);
163 
164  static void GradeSinglePosition(const vector<DtTopoPoint>& samplePoints, const DtTopoPoint& areaCenter,
165  const DtTopoPoint& position,
166  int metersFire, int metersCover, int interval,
167  double heightFire, double heightCover, double heightTo,
168  double maxSlopeDegrees,
169  const DtHostQueryInterface& _losChecker,
170  DtGradeResult& fireResult, DtGradeResult& coverResult);
171  static void SelectGradesImp(vector<int>& grades, int fromInd, int toInd,
172  vector<int>& indices, int top,
173  int selectCount, int spacing, vector<int>& selected);
174 };
175 
182 
184 {
185 public:
186  virtual bool checkLineOfSight(double topoFromX, double topoFromY, double heightAboveFrom,
187  double topoToX, double topoToY, double heightAboveTo) const = 0;
188  virtual double getHeight(double topoX, double topoY) const = 0;
189 };
190 
192 {
193 public:
194  GroupMatch() : mNextSet(1) { mTranslation.push_back(0); }
195  void RecordMatch(int i, int j);
196  void Translate(vector<int>& _translation);
197  int NextSet();
198 private:
199  int mNextSet;
200  vector<int> mTranslation;
201 };
202 
204 {
205 public:
206  DtSectorCommon(const DtTopoPoint& origin, double maxWidth, double maxDepth);
207  const DtTopoPoint& OriginPoint() const {return originPoint;}
208  double MaxGroupWidth() const { return maxGroupWidth; }
209  double MaxGroupDepth() const { return maxGroupDepth; }
210 private:
214 };
215 
216 class DtSector
217 {
218 public:
219  DtSector(const DtSectorCommon& common, double degree = 0, double fireDistance = 0, double coverDistance = 0);
220  double AddPosition(double degree, double fireDistance, double coverDistance, DtSector& result);
221  bool Overlapps(const DtSector& other) const;
222  DtArea ContainingRectangle() const;
223  DtTopoPoint Center() const;
224  double Width() const;
225  double Depth() const { return maxDistance - minDistance; }
226 private:
228  double minDegree;
229  double maxDegree;
230  double minDistance;
231  double maxDistance;
232 };
233 
double z() const
Definition: terrainReasonerAlgos.h:25
Definition: terrainReasonerAlgos.h:216
int verticalIndex
Definition: terrainReasonerAlgos.h:40
const DtTopoPoint & OriginPoint() const
Definition: terrainReasonerAlgos.h:207
int mNextSet
Definition: terrainReasonerAlgos.h:199
void setZ(double _z)
Definition: terrainReasonerAlgos.h:26
voidpf uLong int origin
Definition: ioapi.h:42
double MaxGroupWidth() const
Definition: terrainReasonerAlgos.h:208
double my
Definition: terrainReasonerAlgos.h:29
GroupMatch()
Definition: terrainReasonerAlgos.h:194
DtTopoPoint()
Definition: terrainReasonerAlgos.h:20
DtTopoPoint(double _x, double _y, double _z)
Definition: terrainReasonerAlgos.h:19
double MaxGroupDepth() const
Definition: terrainReasonerAlgos.h:209
double maxGroupDepth
Definition: terrainReasonerAlgos.h:213
This class represents a topographic coordinate. It has the exact same interface as DtVector...
Definition: terrainReasonerAlgos.h:16
double Depth() const
Definition: terrainReasonerAlgos.h:225
This class services DtTerrainReasoner. It contains actual implementations of the algorithms used for ...
Definition: terrainReasonerAlgos.h:58
double mx
Definition: terrainReasonerAlgos.h:28
Definition: terrainReasonerAlgos.h:203
double minDegree
Definition: terrainReasonerAlgos.h:228
DtTopoPoint originPoint
Definition: terrainReasonerAlgos.h:211
double y() const
Definition: terrainReasonerAlgos.h:23
DtSectorCommon common
Definition: terrainReasonerAlgos.h:227
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:183
This struct represent a view (AKA fire) point or cover point that was graded (0.0 - 100...
Definition: terrainReasonerAlgos.h:37
double grade
Definition: terrainReasonerAlgos.h:42
double x() const
Definition: terrainReasonerAlgos.h:21
DtTopoPoint point
Definition: terrainReasonerAlgos.h:41
Definition: terrainReasonerAlgos.h:191
Definition: terrainUtility.h:15
vector< int > mTranslation
Definition: terrainReasonerAlgos.h:200
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...
vector< bool > covered
Definition: terrainReasonerAlgos.h:43
Definition: terrainUtility.h:41
void setX(double _x)
Definition: terrainReasonerAlgos.h:22
double maxDistance
Definition: terrainReasonerAlgos.h:231
Definition: terrainUtility.h:24
void setY(double _y)
Definition: terrainReasonerAlgos.h:24
double maxGroupWidth
Definition: terrainReasonerAlgos.h:212
double minDistance
Definition: terrainReasonerAlgos.h:230
int lateralIndex
Definition: terrainReasonerAlgos.h:39
double maxDegree
Definition: terrainReasonerAlgos.h:229
double mz
Definition: terrainReasonerAlgos.h:30

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)