position.cc
1 #include "vector.hh"
2 #include "Settings.h"
3 #include "position.hh"
4 #include "earthmodel.hh"
5 #include <cmath>
6 #include "Constants.h"
8 {
9  //This method intentionally left blank.
10 } //Position default constructor
11 
12  Position::Position(Vector vec) : Vector(vec[0],vec[1],vec[2])
13 {
14  //This method intentionally left blank.
15 } //Position constructor from Vector
16 
17  Position::Position(double longitude, double latitude, double altitude) {
18  Vector location = z_axis;
19  theta = latitude * RADDEG;
20 
21  phi=EarthModel::LongtoPhi_0isPrimeMeridian(longitude); // convert longitude (-180 to 180) to phi (0 to 2pi wrt 90E, counter-clockwise)
22 
23  location = location.RotateY(theta);
24  location = location.RotateZ(phi);
25  location = altitude * location;
26 
27  x = location[0];
28  y = location[1];
29  z = location[2];
30 } //Position constructor from longitude and latitude
31 
32  Position::Position(double theta_inp, double phi_inp) : Vector(theta_inp,phi_inp)
33 {
34  //This method intentionally left blank.
35 } //Constructor Position(theta,phi)
36 
37  double Position::Distance(const Position &second) const {
38  return sqrt((x - second.x)*(x-second.x)
39  + (y - second.y)*(y-second.y)
40  + (z - second.z)*(z-second.z)); // it saves time to multiply them like this rather than use pow
41 } //Position::Distance
42 
43  double Position::SurfaceDistance(const Position &second, double local_surface) const {
44  return this->Angle(second) * local_surface;
45 } //Position::SurfaceDistance
46 
47  double Position::Lat() const {
48  return Theta()*DEGRAD;
49 } //Position::Lat
50 
51  double Position::Lon() const {
52  double phi_deg = Phi()*DEGRAD;
53 
54  if (phi_deg > 270.)
55  phi_deg = phi_deg-360.;
56 
57  return (270. - phi_deg);
58 } //Position::Lon
double Distance(const Position &second) const
Returns chord distance (direct distance between two vectors)
Definition: position.cc:37
double Lat() const
Returns latitude, where the +z direction is at 0 latitude.
Definition: position.cc:47
This class is a 3-vector that represents a position on the Earth&#39;s surface.
Definition: position.hh:26
double SurfaceDistance(const Position &second, double local_surface) const
Returns "surface distance" between two positions.
Definition: position.cc:43
This class represents a three-vector. Operators are overloaded to provide for the familiar operations...
Definition: vector.hh:27
Position()
Default constructor: calls default constructor of Vector.
Definition: position.cc:7
double Lon() const
Returns longitude.
Definition: position.cc:51