GeographicLib
2.7
Toggle main menu visibility
Loading...
Searching...
No Matches
LocalCartesian.cpp
Go to the documentation of this file.
1
/**
2
* \file LocalCartesian.cpp
3
* \brief Implementation for GeographicLib::LocalCartesian class
4
*
5
* Copyright (c) Charles Karney (2008-2015) <karney@alum.mit.edu> and licensed
6
* under the MIT/X11 License. For more information, see
7
* https://geographiclib.sourceforge.io/
8
**********************************************************************/
9
10
#include <
GeographicLib/LocalCartesian.hpp
>
11
12
namespace
GeographicLib
{
13
14
using namespace
std;
15
16
void
LocalCartesian::Reset
(real lat0, real lon0, real h0) {
17
_lat0 =
Math::LatFix
(lat0);
18
_lon0 =
Math::AngNormalize
(lon0);
19
_h0 = h0;
20
_earth.Forward(_lat0, _lon0, _h0, _x0, _y0, _z0);
21
real sphi, cphi, slam, clam;
22
Math::sincosd
(_lat0, sphi, cphi);
23
Math::sincosd
(_lon0, slam, clam);
24
Geocentric::Rotation(sphi, cphi, slam, clam, _r);
25
}
26
27
void
LocalCartesian::MatrixMultiply(
real
M[dim2_])
const
{
28
// M = r' . M
29
real
t[dim2_];
30
copy(M, M + dim2_, t);
31
for
(
size_t
i = 0; i < dim2_; ++i) {
32
size_t
row = i / dim_, col = i % dim_;
33
M[i] = _r[row] * t[col] + _r[row+3] * t[col+3] + _r[row+6] * t[col+6];
34
}
35
}
36
37
void
LocalCartesian::IntForward(
real
lat,
real
lon,
real
h,
38
real
& x,
real
& y,
real
& z,
39
real
M[dim2_])
const
{
40
real xc, yc, zc;
41
_earth.IntForward(lat, lon, h, xc, yc, zc, M);
42
xc -= _x0; yc -= _y0; zc -= _z0;
43
x = _r[0] * xc + _r[3] * yc + _r[6] * zc;
44
y = _r[1] * xc + _r[4] * yc + _r[7] * zc;
45
z = _r[2] * xc + _r[5] * yc + _r[8] * zc;
46
if
(M)
47
MatrixMultiply(M);
48
}
49
50
void
LocalCartesian::IntReverse(
real
x,
real
y,
real
z,
51
real
& lat,
real
& lon,
real
& h,
52
real
M[dim2_])
const
{
53
real
54
xc = _x0 + _r[0] * x + _r[1] * y + _r[2] * z,
55
yc = _y0 + _r[3] * x + _r[4] * y + _r[5] * z,
56
zc = _z0 + _r[6] * x + _r[7] * y + _r[8] * z;
57
_earth.IntReverse(xc, yc, zc, lat, lon, h, M);
58
if
(M)
59
MatrixMultiply(M);
60
}
61
62
}
// namespace GeographicLib
real
GeographicLib::Math::real real
Definition
Geod3Solve.cpp:25
LocalCartesian.hpp
Header for GeographicLib::LocalCartesian class.
GeographicLib::LocalCartesian::Reset
void Reset(real lat0, real lon0, real h0=0)
Definition
LocalCartesian.cpp:16
GeographicLib::Math::LatFix
static T LatFix(T x)
Definition
Math.hpp:303
GeographicLib::Math::sincosd
static void sincosd(T x, T &sinx, T &cosx)
Definition
Math.cpp:104
GeographicLib::Math::AngNormalize
static T AngNormalize(T x)
Definition
Math.cpp:69
GeographicLib
Namespace for GeographicLib.
Definition
Accumulator.cpp:12
src
LocalCartesian.cpp
Generated by
1.17.0