-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelperfunctions.cc
75 lines (57 loc) · 1.88 KB
/
helperfunctions.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
* helperfunctions.cc
*
* Created on: Jun 28, 2015
* Author: erl
*/
#include "helperfunctions.h"
#define _USE_MATH_DEFINES // Ensures the definition of PI is included with cmath.
#include <cmath>
#include <assert.h>
/**
* Calculates the Elevation angle for object 1 towards object 2.
*/
double Helperfunctions::CommElevationAngleXYZ(double x1, double y1, double z1, double x2, double y2, double z2) {
// Calculate vector from object 1 to object 2
double xv = x2 - x1;
double yv = y2 - y1;
double zv = z2 - z1;
//=degrees(asin(abs(R4)/(sqrt(P4*P4+Q4*Q4+R4*R4))))
double degrees = asin(std::abs(zv) / sqrt(xv * xv + yv * yv + zv * zv)) * 180.0 / M_PI;
return degrees;
}
/**
* Calculates the Elevation angle for object 1 towards object 2.
*/
double Helperfunctions::CommDistanceXYZ(double x1, double y1, double z1, double x2, double y2, double z2) {
// Calculate vector from object 1 to object 2
double xv = x2 - x1;
double yv = y2 - y1;
double zv = z2 - z1;
//=degrees(asin(abs(R4)/(sqrt(P4*P4+Q4*Q4+R4*R4))))
double meters = sqrt(xv * xv + yv * yv + zv * zv);
return meters;
}
double Helperfunctions::DistanceXY(double x1, double y1, double x2, double y2) {
double dx = x1 - x2;
double dy = y1 - y2;
return sqrt(dx * dx + dy * dy);
}
/**
* Function to estimate whether two nodes will have connectivity. Should be improved.
*/
bool Helperfunctions::ConnectedEstimation(double x1, double y1, double z1, double x2, double y2, double z2) {
if (std::abs(z1 - z2) >= 500 && DistanceXY(x1, y1, x2, y2) < 3000)
return true;
if (std::abs(z1 - z2) < 500 && z1 > 500 && DistanceXY(x1, y1, x2, y2) < 3000)
return true;
if (std::abs(z1 - z2) < 500 && z1 <= 500 && DistanceXY(x1, y1, x2, y2) < 500)
return true;
return false;
}
/**
* Simple function to calculate an average value from two numbers.
*/
double Helperfunctions::Mean(double x1, double x2) {
return (x1 + x2) / 2.0;
}