Isis 3.0
Home
SurfacePoint.h
Go to the documentation of this file.
1 #ifndef SurfacePoint_h
2 #define SurfacePoint_h
3 
25 #include <vector>
26 #include <cmath>
27 
28 #include "boost/numeric/ublas/symmetric.hpp"
29 #include "boost/numeric/ublas/io.hpp"
30 
31 #include "Displacement.h"
32 #include "Distance.h"
33 #include "Angle.h"
34 
35 namespace Isis {
36  class Latitude;
37  class Longitude;
38 
86  class SurfacePoint {
87  public:
88  // Constructors
89 // SurfacePoint(const std::vector <double> radii);
90  SurfacePoint();
91  SurfacePoint(const SurfacePoint &other);
92  SurfacePoint(const Latitude &lat, const Longitude &lon,
93  const Distance &radius);
94  SurfacePoint(const Latitude &lat, const Longitude &lon,
95  const Distance &radius, const Angle &latSigma, const Angle &lonSigma,
96  const Distance &radiusSigma);
97  SurfacePoint(const Latitude &lat, const Longitude &lon,
98  const Distance &radius,
99  const boost::numeric::ublas::symmetric_matrix
100  <double,boost::numeric::ublas::upper>& covar);
101  SurfacePoint(const Displacement &x, const Displacement &y,
102  const Displacement &z);
103  SurfacePoint(const Displacement &x, const Displacement &y,
104  const Displacement &z, const Distance &xSigma, const Distance &ySigma,
105  const Distance &zSigma);
106  SurfacePoint(const Displacement &x, const Displacement &y,
107  const Displacement &z,
108  const boost::numeric::ublas::symmetric_matrix
109  <double,boost::numeric::ublas::upper>& covar);
110  ~SurfacePoint();
111 
112 // Rectangular loading utilities
113  void SetRectangular(const Displacement &x, const Displacement &y,
114  const Displacement &z, const Distance &xSigma=Distance(),
115  const Distance &ySigma=Distance(), const Distance &zSigma=Distance());
116 
117  void SetRectangular(const Displacement x, const Displacement y, const Displacement z,
118  const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
119 
121  void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma,
122  const Distance &zSigma);
123 
124 
126  const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
127 
128 // Spherical loading utilities
129 
132  void SetSpherical (const Latitude &lat, const Longitude &lon,
133  const Distance &radius, const Angle &latSigma=Angle(),
134  const Angle &lonSigma=Angle(),
135  const Distance &radiusSigma=Distance());
136 
137  void SetSpherical (const Latitude &lat, const Longitude &lon,
138  const Distance &radius,
139  const boost::numeric::ublas::symmetric_matrix
140  <double,boost::numeric::ublas::upper>& covar);
141 
142  void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon,
143  const Distance &radius);
144 
145  void SetSphericalMatrix(
146  const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
147 
148  void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma,
149  const Distance &radiusSigma);
150 
151  void SetSphericalSigmasDistance(const Distance &latSigma,
152  const Distance &lonSigma,
153  const Distance &radiusSigma);
154 
155  void SetRadii(const Distance &majorRadius, const Distance &minorRadius,
156  const Distance &polarRadius);
157 
158  void ResetLocalRadius(const Distance &radius);
159  bool Valid() const;
160 
161 // Output methods
162  Displacement GetX() const;
163  Displacement GetY() const;
164  Displacement GetZ() const;
165  Distance GetXSigma() const;
166  Distance GetYSigma() const;
167  Distance GetZSigma() const;
168  boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>
169  GetRectangularMatrix() const;
170  Latitude GetLatitude() const;
171  Longitude GetLongitude() const;
172  Distance GetLocalRadius() const;
173  Angle GetLatSigma() const;
175  double GetLatWeight() const;
176  Angle GetLonSigma() const;
178  double GetLonWeight() const;
180  double GetLocalRadiusWeight() const;
181  boost::numeric::ublas::symmetric_matrix
182  <double,boost::numeric::ublas::upper> GetSphericalMatrix() const;
183 
184 // Computational methods
185  Distance GetDistanceToPoint(const SurfacePoint &other) const;
187  const Distance &sphereRadius) const;
188 
189 // Misc methods
190  void ToNaifArray(double naifOutput[3]) const;
191  void FromNaifArray(const double naifValues[3]);
192 
193 // Operators
194  bool operator==(const SurfacePoint &other) const;
195  SurfacePoint &operator=(const SurfacePoint &other);
196 
197  private:
198  void InitCovariance();
199  void InitPoint();
200  void InitRadii();
201  void SetRectangularPoint(const Displacement &x, const Displacement &y, const Displacement &z);
202  void SetSphericalPoint(const Latitude &lat, const Longitude &lon, const Distance &radius);
203  void FreeAllocatedMemory();
204 
205  Distance *p_majorAxis;
206  Distance *p_minorAxis;
207  Distance *p_polarAxis;
208  Displacement *p_x;
209  Displacement *p_y;
210  Displacement *p_z;
212  boost::numeric::ublas::symmetric_matrix
213  <double,boost::numeric::ublas::upper> *p_rectCovar;
215  boost::numeric::ublas::symmetric_matrix
216  <double,boost::numeric::ublas::upper> *p_sphereCovar;
217  };
218 };
219 
220 #endif
221 
This class defines a body-fixed surface point.
Definition: SurfacePoint.h:86
Angle GetLonSigma() const
Definition: SurfacePoint.cpp:848
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > GetSphericalMatrix() const
Definition: SurfacePoint.cpp:980
Distance GetLocalRadiusSigma() const
Definition: SurfacePoint.cpp:972
void SetSpherical(const Latitude &lat, const Longitude &lon, const Distance &radius, const Angle &latSigma=Angle(), const Angle &lonSigma=Angle(), const Distance &radiusSigma=Distance())
Set surface point and covariance matrix in planetocentric coordinates and convert to rectangular (Lat...
Definition: SurfacePoint.cpp:469
Angle GetLatSigma() const
Definition: SurfacePoint.cpp:840
Distance GetLocalRadius() const
Return the radius of the surface point.
Definition: SurfacePoint.cpp:904
Displacement GetZ() const
Definition: SurfacePoint.cpp:800
Distance GetZSigma() const
Definition: SurfacePoint.cpp:821
Displacement GetX() const
Definition: SurfacePoint.cpp:786
double GetLatWeight() const
Return latitude weight for bundle adjustment Units are 1/(radians)^2.
Definition: SurfacePoint.cpp:996
~SurfacePoint()
Destroys a SurfacePoint object/.
Definition: SurfacePoint.cpp:205
This class is designed to encapsulate the concept of a Latitude.
Definition: Latitude.h:59
void ResetLocalRadius(const Distance &radius)
This method resets the local radius of a SurfacePoint.
Definition: SurfacePoint.cpp:751
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > GetRectangularMatrix() const
Definition: SurfacePoint.cpp:828
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
void ToNaifArray(double naifOutput[3]) const
A naif array is a c-style array of size 3.
Definition: SurfacePoint.cpp:668
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
void SetRectangularMatrix(const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar)
Set rectangular covariance matrix.
Definition: SurfacePoint.cpp:361
Distance measurement, usually in meters.
Definition: Distance.h:47
void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, const Distance &zSigma)
Set surface point and sigmas in rectangular coordinates and convert to planetocentric.
Definition: SurfacePoint.cpp:335
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
Definition: SurfacePoint.cpp:880
Distance GetYSigma() const
Definition: SurfacePoint.cpp:814
void SetRadii(const Distance &majorRadius, const Distance &minorRadius, const Distance &polarRadius)
Reset the radii of the surface body of the surface point.
Definition: SurfacePoint.cpp:710
Distance GetLonSigmaDistance() const
Return the longiitude sigma in meters.
Definition: SurfacePoint.cpp:946
This class is designed to encapsulate the concept of a Longitude.
Definition: Longitude.h:52
double GetLonWeight() const
Return longitude weight for bundle adjustment Units are 1/(radians)^2.
Definition: SurfacePoint.cpp:1012
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
Definition: SurfacePoint.cpp:860
Distance GetDistanceToPoint(const SurfacePoint &other) const
Computes and returns the distance between two surface points.
Definition: SurfacePoint.cpp:1046
Displacement GetY() const
Definition: SurfacePoint.cpp:793
bool Valid() const
Definition: SurfacePoint.cpp:779
Defines an angle and provides unit conversions.
Definition: Angle.h:58
void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma, const Distance &radiusSigma)
Set the spherical sigmas into the spherical variance/covariance matrix.
Definition: SurfacePoint.cpp:517
void SetSphericalMatrix(const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar)
Set spherical covariance matrix.
Definition: SurfacePoint.cpp:586
Displacement is a signed length, usually in meters.
Definition: Displacement.h:43
void FromNaifArray(const double naifValues[3])
A naif array is a c-style array of size 3.
Definition: SurfacePoint.cpp:689
bool operator==(const SurfacePoint &other) const
Definition: SurfacePoint.cpp:1101
Distance GetLatSigmaDistance() const
Return the latitude sigma in meters.
Definition: SurfacePoint.cpp:920
void SetSphericalSigmasDistance(const Distance &latSigma, const Distance &lonSigma, const Distance &radiusSigma)
Set the spherical sigmas (in meters) into the spherical variance/covariance matrix.
Definition: SurfacePoint.cpp:555
SurfacePoint()
Constructs an empty SurfacePoint object.
Definition: SurfacePoint.cpp:19
Distance GetXSigma() const
Definition: SurfacePoint.cpp:807
SurfacePoint & operator=(const SurfacePoint &other)
Definition: SurfacePoint.cpp:1153
void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, const Distance &radius)
Update spherical coordinates (lat/lon/radius)
Definition: SurfacePoint.cpp:503
double GetLocalRadiusWeight() const
Return radius weight for bundle adjustment Units are 1/(meters)^2.
Definition: SurfacePoint.cpp:1028
void SetRectangular(const Displacement &x, const Displacement &y, const Displacement &z, const Distance &xSigma=Distance(), const Distance &ySigma=Distance(), const Distance &zSigma=Distance())
Set surface point in rectangular body-fixed coordinates wtih optional sigmas.
Definition: SurfacePoint.cpp:299