GeographicLib: LocalCartesian.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

11

13

14 using namespace std;

15

19 _h0 = h0;

20 _earth.Forward(_lat0, _lon0, _h0, _x0, _y0, _z0);

21 real sphi, cphi, slam, clam;

24 Geocentric::Rotation(sphi, cphi, slam, clam, _r);

25 }

26

27 void LocalCartesian::MatrixMultiply(real M[dim2_]) const {

28

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,

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,

52 real M[dim2_]) const {

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}

GeographicLib::Math::real real

Header for GeographicLib::LocalCartesian class.

void Forward(real lat, real lon, real h, real &X, real &Y, real &Z) const

void Reset(real lat0, real lon0, real h0=0)

Definition LocalCartesian.cpp:16

static void sincosd(T x, T &sinx, T &cosx)

static T AngNormalize(T x)

Namespace for GeographicLib.