Isis 3.0 Programmer Reference
Back | 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;
179  Distance GetLocalRadiusSigma() 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
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > * p_sphereCovar
3x3 upper triangular covariance matrix ocentric coordinates
Definition: SurfacePoint.h:216
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...
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > * p_rectCovar
3x3 upper triangular covariance matrix rectangular coordinates
Definition: SurfacePoint.h:213
Distance GetLocalRadius() const
Return the radius of the surface point.
void SetRectangularPoint(const Displacement &x, const Displacement &y, const Displacement &z)
This is a private method to set a surface point in rectangular, body-fixed coordinates.
double GetLatWeight() const
Return latitude weight for bundle adjustment Units are 1/(radians)^2.
~SurfacePoint()
Destroys a SurfacePoint object/.
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.
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.
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.
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.
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
void SetRadii(const Distance &majorRadius, const Distance &minorRadius, const Distance &polarRadius)
Reset the radii of the surface body of the surface point.
Distance GetLonSigmaDistance() const
Return the longiitude sigma in meters.
void InitPoint()
Initialize a surface point.
This class is designed to encapsulate the concept of a Longitude.
Definition: Longitude.h:52
void InitCovariance()
Initialize the variance/covariance matrices.
double GetLonWeight() const
Return longitude weight for bundle adjustment Units are 1/(radians)^2.
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
void SetSphericalPoint(const Latitude &lat, const Longitude &lon, const Distance &radius)
This is a private method to set a surface point in spherical (lat/lon/radius), body-fixed coordinates...
Distance GetDistanceToPoint(const SurfacePoint &other) const
Computes and returns the distance between two surface points.
void InitRadii()
Initialize the target surface radii.
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.
void SetSphericalMatrix(const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar)
Set spherical covariance matrix.
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.
Distance GetLatSigmaDistance() const
Return the latitude sigma in meters.
void SetSphericalSigmasDistance(const Distance &latSigma, const Distance &lonSigma, const Distance &radiusSigma)
Set the spherical sigmas (in meters) into the spherical variance/covariance matrix.
SurfacePoint()
Constructs an empty SurfacePoint object.
void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, const Distance &radius)
Update spherical coordinates (lat/lon/radius)
double GetLocalRadiusWeight() const
Return radius weight for bundle adjustment Units are 1/(meters)^2.
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.

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:30:15