-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtf.cpp
executable file
·103 lines (79 loc) · 2.23 KB
/
tf.cpp
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "tf.h"
void tf:: calcDcm (Matrix3d* ans, int axis, double rad)
{
const int X = 0, Y = 1, Z = 2;
switch (axis) {
case X:
*ans <<
1.0, 0.0, 0.0,
0.0, cos (rad), sin (rad),
0.0, -sin (rad), cos (rad);
break;
case Y:
*ans <<
cos (rad), 0.0, -sin (rad),
0.0, 1.0, 0.0,
sin (rad), 0.0, cos (rad);
break;
case Z:
*ans <<
cos (rad), sin (rad), 0.0,
-sin (rad), cos (rad), 0.0,
0.0, 0.0, 1.0;
break;
default:
*ans = Matrix3d:: Identity ();
break;
}
}
void tf:: normalizeRadian (double* radian, double start_radian)
{
const double TwoPi = 2.0 * M_PI;
double rad = *radian;
if (rad < 0.0 || rad > TwoPi) {
int div = static_cast<int> ( (rad - start_radian) / TwoPi);
rad -= static_cast<double> (div) * TwoPi;
if (rad < start_radian) {
rad += TwoPi;
}
}
*radian = rad;
}
void tf:: diffRadians (double *ans, double rad1, double rad2)
{
const double Pi = M_PI;
double diff = rad1 - rad2;
normalizeRadian (&diff);
if (diff > Pi) {
diff -= 2.0 * Pi;
}
*ans = diff;
}
void tf:: convertMJd2Jd (double* julianday, double modified_julianday)
{
const double JDayOffsetFromMJDay = 2400000.5;
*julianday = modified_julianday + JDayOffsetFromMJDay;
}
void tf:: convertJd2TJd (double* truncated_julianday, double julianday)
{
const double TJDayOffsetFromJDay = 2440000.5;
*truncated_julianday = julianday - TJDayOffsetFromJDay;
}
void tf:: convertMJd2Unixtime (double* unixtime, double modified_julianday)
{
const double MJDayAtUnixtimeOrigin = 40587.0;
const double SecondsDay = 24.0 * 3600.0;
*unixtime = (modified_julianday - MJDayAtUnixtimeOrigin) * SecondsDay;
}
void tf:: convertUnixtime2Jd (double* julianday, double unixtime)
{
const double SecondsDay = 24.0 * 3600.0;
const double JDayAtUnixtimeOrigin = 2440587.5;
*julianday = JDayAtUnixtimeOrigin + unixtime / SecondsDay;
}
void tf:: convertJd2Unixtime (double* unixtime, double julianday)
{
const double SecondsDay = 24.0 * 3600.0;
const double JDayAtUnixtimeOrigin = 2440587.5;
*unixtime = (julianday - JDayAtUnixtimeOrigin) * SecondsDay;
}