VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
terrainUtility.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 #define _USE_MATH_DEFINES
11 #include <math.h>
12 #include <stdlib.h>
13 #define MAX_VERTICES 1000
14 
15 class DtArea
16 {
17 public:
18  int nvert;
21 };
22 
23 using namespace std;
25 {
26 public:
27  DtIntMatrix(int x = 0, int y = 0) : mCountX(0), mCountY(0), mBuffer(NULL) { SetDimensions(x, y); }
28  ~DtIntMatrix() { free(mBuffer); }
29  size_t Size() const { return mCountX * mCountY; }
30  size_t CountX() const { return mCountX; }
31  size_t CountY() const { return mCountY; }
32  void SetDimensions(int x, int y);
33  void Set(int x, int y, int value);
34  int Get(int x, int y) const;
35 private:
36  int* mBuffer;
37  size_t mCountX;
38  size_t mCountY;
39 };
40 
42 {
43 public:
44  DtIntMatrixSlice(const DtIntMatrix& grid, int ind, bool isX);
45  int Get(int ind) const;
46  int Size() const { return mSize; }
47 private:
49  int mX;
50  int mY;
51  int mDx;
52  int mDy;
53  int mSize;
54 };
55 
56 
57 
59 {
60 public:
61  static bool IsPointInsidePolygon(const DtArea& polygon, float testx, float testy)
62  {
63  int i, j, c = 0;
64  for (i = 0, j = polygon.nvert - 1; i < polygon.nvert; j = i++) {
65  if (((polygon.verty[i] > testy) != (polygon.verty[j] > testy)) &&
66  (testx < (polygon.vertx[j] - polygon.vertx[i]) * (testy - polygon.verty[i]) /
67  (polygon.verty[j] - polygon.verty[i]) + polygon.vertx[i]))
68  c = !c;
69  }
70  return c;
71  };
72  static bool PolygonsOverlap(const DtArea& polygon1, const DtArea& polygon2)
73  {
74  int i;
75  for (i = 0; i < polygon1.nvert; i++) {
76  if (IsPointInsidePolygon(polygon2, polygon1.vertx[i], polygon1.verty[i]))
77  return true;
78  }
79  for (i = 0; i < polygon2.nvert; i++) {
80  if (IsPointInsidePolygon(polygon1, polygon2.vertx[i], polygon2.verty[i]))
81  return true;
82  }
83  return false;
84  };
85  static float polygonArea(const DtArea& polygon)
86  {
87  float area = 0;
88  int j = polygon.nvert - 1;
89  for (int i = 0; i < polygon.nvert; i++)
90  {
91  area += (polygon.vertx[j] + polygon.vertx[i]) * (polygon.verty[j] - polygon.verty[i]);
92  j = i;
93  }
94  return (float)fabs(area / 2.0);
95  }
96  static void PolygonBoundaries(const DtArea& polygon, float& minx, float& miny, float& maxx, float& maxy)
97  {
98  minx = polygon.vertx[0];
99  miny = polygon.verty[0];
100  maxx = polygon.vertx[0];
101  maxy = polygon.verty[0];
102  for (int i = 1; i < polygon.nvert; i++) {
103  if (minx > polygon.vertx[i])
104  minx = polygon.vertx[i];
105  if (miny > polygon.verty[i])
106  miny = polygon.verty[i];
107  if (maxx < polygon.vertx[i])
108  maxx = polygon.vertx[i];
109  if (maxy < polygon.verty[i])
110  maxy = polygon.verty[i];
111  }
112  };
113  static double Distance(double x1, double y1, double x2, double y2)
114  {
115  double dx = x1 - x2;
116  double dy = y1 - y2;
117  return sqrt(dx * dx + dy * dy);
118  }
119  static double DegreeBetween(double x1, double y1, double x2, double y2);
120  static void PointFromPointDistanceDegree(double originX, double originY, double distance, double degree,
121  double& pointX, double& pointY);
122 };
123 
#define MAX_VERTICES
Definition: terrainUtility.h:13
size_t mCountX
Definition: terrainUtility.h:37
float verty[MAX_VERTICES]
Definition: terrainUtility.h:20
static bool IsPointInsidePolygon(const DtArea &polygon, float testx, float testy)
Definition: terrainUtility.h:61
Definition: terrainUtility.h:58
int nvert
Definition: terrainUtility.h:18
float vertx[MAX_VERTICES]
Definition: terrainUtility.h:19
static float polygonArea(const DtArea &polygon)
Definition: terrainUtility.h:85
size_t CountX() const
Definition: terrainUtility.h:30
~DtIntMatrix()
Definition: terrainUtility.h:28
int mX
Definition: terrainUtility.h:49
static bool PolygonsOverlap(const DtArea &polygon1, const DtArea &polygon2)
Definition: terrainUtility.h:72
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points. Coordinates are in local database coordinates The coordinat...
size_t mCountY
Definition: terrainUtility.h:38
static double Distance(double x1, double y1, double x2, double y2)
Definition: terrainUtility.h:113
int Size() const
Definition: terrainUtility.h:46
DtIntMatrix(int x=0, int y=0)
Definition: terrainUtility.h:27
int * mBuffer
Definition: terrainUtility.h:36
Definition: terrainUtility.h:15
size_t CountY() const
Definition: terrainUtility.h:31
static void PolygonBoundaries(const DtArea &polygon, float &minx, float &miny, float &maxx, float &maxy)
Definition: terrainUtility.h:96
size_t Size() const
Definition: terrainUtility.h:29
int mDx
Definition: terrainUtility.h:51
const DtIntMatrix & mSource
Definition: terrainUtility.h:48
Definition: terrainUtility.h:41
Definition: terrainUtility.h:24
int mDy
Definition: terrainUtility.h:52
int mSize
Definition: terrainUtility.h:53
int mY
Definition: terrainUtility.h:50

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)