-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtf.cpp
98 lines (77 loc) · 2.04 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
/********************************************************************************
* File Name : tf.cpp
* Title :
* Programmer: Motki Kimura
* Belonging :
* Date : 2014.8.3
* Language : C++
*********************************************************************************
* class to transform the coordinate
*
********************************************************************************/
#include "tf.h"
void tf:: calcDcm (Matrix3d* ans, int axis, double angle)
{
const int X = 0, Y = 1, Z = 2;
switch (axis) {
case X:
*ans <<
1.0, 0.0, 0.0,
0.0, cos (angle), sin (angle),
0.0, -sin (angle), cos (angle);
break;
case Y:
*ans <<
cos (angle), 0.0, -sin (angle),
0.0, 1.0, 0.0,
sin (angle), 0.0, cos (angle);
break;
case Z:
*ans <<
cos (angle), sin (angle), 0.0,
-sin (angle), cos (angle), 0.0,
0.0, 0.0, 1.0;
break;
default:
*ans = Matrix3d:: Identity ();
break;
}
}
void tf:: normalizeRadian (double* radian, double startPointRadian)
{
const double TwoPi = 2.0 * M_PI;
double rad = *radian;
if (rad < 0.0 || rad > TwoPi) {
int div = static_cast<int> ( (rad - startPointRadian) / TwoPi);
rad -= static_cast<double> (div) * TwoPi;
if (rad < startPointRadian) {
rad += TwoPi;
}
}
*radian = rad;
// startPointRadian <= rad < startPointRadian + 2.0 Pi
}
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:: convertMjdToJd (double* julianDay, double modifiedJd)
{
*julianDay = modifiedJd + 2400000.5;
}
void tf:: convertJdToTjd (double* truncatedJd, double julianDay)
{
*truncatedJd = julianDay - 2440000.5;
}
void tf:: convertMjdToUnixtime (double* unixtime, double modifiedJd)
{
const double mjdAtUnixtimeOrigin = 40587.0;
const double secondsDay = 24.0 * 3600.0;
*unixtime = (modifiedJd - mjdAtUnixtimeOrigin) * secondsDay;
}