VR-Forces 5.0.3 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 
7 
8 #pragma once
9 #define _USE_MATH_DEFINES
10 #include <math.h>
11 #include <stdlib.h>
12 #define MAX_VERTICES 1000
13 
14 class DtArea
15 {
16 public:
17  int nvert;
20 };
21 
22 using namespace std;
24 {
25 public:
26  DtIntMatrix(int x = 0, int y = 0) : mCountX(0), mCountY(0), mBuffer(NULL) { SetDimensions(x, y); }
27  ~DtIntMatrix() { free(mBuffer); }
28  size_t Size() const { return mCountX * mCountY; }
29  size_t CountX() const { return mCountX; }
30  size_t CountY() const { return mCountY; }
31  void SetDimensions(int x, int y);
32  void Set(int x, int y, int value);
33  int Get(int x, int y) const;
34 private:
35  int* mBuffer;
36  size_t mCountX;
37  size_t mCountY;
38 };
39 
41 {
42 public:
43  DtIntMatrixSlice(const DtIntMatrix& grid, int ind, bool isX);
44  int Get(int ind) const;
45  int Size() const { return mSize; }
46 private:
48  int mX;
49  int mY;
50  int mDx;
51  int mDy;
52  int mSize;
53 };
54 
55 
56 
58 {
59 public:
60  static bool IsPointInsidePolygon(const DtArea& polygon, float testx, float testy)
61  {
62  int i, j, c = 0;
63  for (i = 0, j = polygon.nvert - 1; i < polygon.nvert; j = i++) {
64  if (((polygon.verty[i] > testy) != (polygon.verty[j] > testy)) &&
65  (testx < (polygon.vertx[j] - polygon.vertx[i]) * (testy - polygon.verty[i]) /
66  (polygon.verty[j] - polygon.verty[i]) + polygon.vertx[i]))
67  c = !c;
68  }
69  return c;
70  };
71  static bool PolygonsOverlap(const DtArea& polygon1, const DtArea& polygon2)
72  {
73  int i;
74  for (i = 0; i < polygon1.nvert; i++) {
75  if (IsPointInsidePolygon(polygon2, polygon1.vertx[i], polygon1.verty[i]))
76  return true;
77  }
78  for (i = 0; i < polygon2.nvert; i++) {
79  if (IsPointInsidePolygon(polygon1, polygon2.vertx[i], polygon2.verty[i]))
80  return true;
81  }
82  return false;
83  };
84  static float polygonArea(const DtArea& polygon)
85  {
86  float area = 0;
87  int j = polygon.nvert - 1;
88  for (int i = 0; i < polygon.nvert; i++)
89  {
90  area += (polygon.vertx[j] + polygon.vertx[i]) * (polygon.verty[j] - polygon.verty[i]);
91  j = i;
92  }
93  return (float)fabs(area / 2.0);
94  }
95  static void PolygonBoundaries(const DtArea& polygon, float& minx, float& miny, float& maxx, float& maxy)
96  {
97  minx = polygon.vertx[0];
98  miny = polygon.verty[0];
99  maxx = polygon.vertx[0];
100  maxy = polygon.verty[0];
101  for (int i = 1; i < polygon.nvert; i++) {
102  if (minx > polygon.vertx[i])
103  minx = polygon.vertx[i];
104  if (miny > polygon.verty[i])
105  miny = polygon.verty[i];
106  if (maxx < polygon.vertx[i])
107  maxx = polygon.vertx[i];
108  if (maxy < polygon.verty[i])
109  maxy = polygon.verty[i];
110  }
111  };
112  static double Distance(double x1, double y1, double x2, double y2)
113  {
114  double dx = x1 - x2;
115  double dy = y1 - y2;
116  return sqrt(dx * dx + dy * dy);
117  }
118  static double DegreeBetween(double x1, double y1, double x2, double y2);
119  static void PointFromPointDistanceDegree(double originX, double originY, double distance, double degree,
120  double& pointX, double& pointY);
121 };
122 
#define MAX_VERTICES
Definition: terrainUtility.h:12
size_t mCountX
Definition: terrainUtility.h:36
float verty[MAX_VERTICES]
Definition: terrainUtility.h:19
static bool IsPointInsidePolygon(const DtArea &polygon, float testx, float testy)
Definition: terrainUtility.h:60
Definition: terrainUtility.h:57
int nvert
Definition: terrainUtility.h:17
float vertx[MAX_VERTICES]
Definition: terrainUtility.h:18
static float polygonArea(const DtArea &polygon)
Definition: terrainUtility.h:84
size_t CountX() const
Definition: terrainUtility.h:29
~DtIntMatrix()
Definition: terrainUtility.h:27
int mX
Definition: terrainUtility.h:48
static bool PolygonsOverlap(const DtArea &polygon1, const DtArea &polygon2)
Definition: terrainUtility.h:71
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:37
static double Distance(double x1, double y1, double x2, double y2)
Definition: terrainUtility.h:112
int Size() const
Definition: terrainUtility.h:45
DtIntMatrix(int x=0, int y=0)
Definition: terrainUtility.h:26
int * mBuffer
Definition: terrainUtility.h:35
Definition: terrainUtility.h:14
size_t CountY() const
Definition: terrainUtility.h:30
static void PolygonBoundaries(const DtArea &polygon, float &minx, float &miny, float &maxx, float &maxy)
Definition: terrainUtility.h:95
size_t Size() const
Definition: terrainUtility.h:28
int mDx
Definition: terrainUtility.h:50
const DtIntMatrix & mSource
Definition: terrainUtility.h:47
Definition: terrainUtility.h:40
Definition: terrainUtility.h:23
int mDy
Definition: terrainUtility.h:51
int mSize
Definition: terrainUtility.h:52
int mY
Definition: terrainUtility.h:49

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)