15#include "boost/numeric/ublas/symmetric.hpp" 
   16#include "boost/numeric/ublas/io.hpp" 
   19#include "Displacement.h" 
  159                   const Distance &radius);
 
  161          const Distance &radius, 
const Angle &latSigma, 
const Angle &lonSigma,
 
  162          const Distance &radiusSigma);
 
  164                   const Distance &radius,
 
  165                   const boost::numeric::ublas::symmetric_matrix
 
  166                     <
double,boost::numeric::ublas::upper>& covar);
 
  167      SurfacePoint(
const Displacement &x, 
const Displacement &y,
 
  168                   const Displacement &z);
 
  169      SurfacePoint(
const Displacement &x, 
const Displacement &y,
 
  170          const Displacement &z, 
const Distance &xSigma, 
const Distance &ySigma,
 
  171          const Distance &zSigma);
 
  172      SurfacePoint(
const Displacement &x, 
const Displacement &y,
 
  173                   const Displacement &z,
 
  174                   const boost::numeric::ublas::symmetric_matrix
 
  175                     <
double,boost::numeric::ublas::upper>& covar);
 
  180          const Displacement &z, 
const Distance &xSigma=Distance(),
 
  181          const Distance &ySigma=Distance(), 
const Distance &zSigma=Distance());
 
  183      void SetRectangular(
const Displacement x, 
const Displacement y, 
const Displacement z,
 
  184        const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
 
  187                                   const Displacement &z);
 
  191                                const Distance &zSigma);
 
  194                                const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar,
 
  195                                SurfacePoint::CoordUnits units = SurfacePoint::Meters);
 
  201      void SetSpherical (
const Latitude &lat, 
const Longitude &lon,
 
  202          const Distance &radius, 
const Angle &latSigma=Angle(),
 
  203          const Angle &lonSigma=Angle(),
 
  204          const Distance &radiusSigma=Distance());
 
  206      void SetSpherical (
const Latitude &lat, 
const Longitude &lon,
 
  207          const Distance &radius,
 
  208          const boost::numeric::ublas::symmetric_matrix
 
  209            <
double,boost::numeric::ublas::upper>& covar);
 
  212                                   const Distance &radius);
 
  215                              const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar,
 
  216                              SurfacePoint::CoordUnits units = SurfacePoint::Meters);
 
  219                              const Distance &radiusSigma);
 
  222                                      const Distance &lonSigma,
 
  223                                      const Distance &radiusSigma);
 
  232         const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);        
 
  236      std::vector<double> 
Partial(CoordinateType type, CoordIndex index);
 
  239      double GetCoord(CoordinateType type, CoordIndex index, CoordUnits units);
 
  242      double GetSigma(CoordinateType type, CoordIndex index, CoordUnits units);
 
  244      double GetWeight(CoordinateType type, CoordIndex index);
 
  245      Displacement GetX() 
const;
 
  246      Displacement GetY() 
const;
 
  247      Displacement GetZ() 
const;
 
  248      Distance GetXSigma() 
const;
 
  249      Distance GetYSigma() 
const;
 
  250      Distance GetZSigma() 
const;
 
  254      boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper> 
 
  255        GetRectangularMatrix(SurfacePoint::CoordUnits units = SurfacePoint::Meters) 
const;
 
  259      Angle GetLatSigma() 
const;
 
  262      Angle GetLonSigma() 
const;
 
  265      Distance GetLocalRadiusSigma() 
const;
 
  267      boost::numeric::ublas::symmetric_matrix
 
  268          <double,boost::numeric::ublas::upper> GetSphericalMatrix
 
  269            (SurfacePoint::CoordUnits units = SurfacePoint::Meters) 
const;
 
  278      double LatToDouble(Latitude lat, CoordUnits units);
 
  279      double LonToDouble(Longitude lon, CoordUnits units);
 
  286          const Distance &sphereRadius) 
const;
 
  302      void SetRectangularPoint(
const Displacement &x, 
const Displacement &y, 
const Displacement &z);
 
  303      void SetSphericalPoint(
const Latitude &lat, 
const Longitude &lon, 
const Distance &radius);
 
  304      void FreeAllocatedMemory();
 
  306      Distance p_localRadius;
 
  311      boost::numeric::ublas::symmetric_matrix
 
  314      boost::numeric::ublas::symmetric_matrix
 
 
This class defines a body-fixed surface point.
 
void SetRectangularCoordinates(const Displacement &x, const Displacement &y, const Displacement &z)
Set surface point in rectangular coordinates.
 
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
 
@ Latitudinal
Planetocentric latitudinal (lat/lon/rad) coordinates.
 
@ Rectangular
Body-fixed rectangular x/y/z coordinates.
 
std::vector< double > LatitudinalDerivative(CoordIndex index)
Compute partial derivative of the conversion of the latitudinal coordinates to body-fixed rectangular...
 
void SetMatrix(CoordinateType type, const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar)
Set the covariance matrix.
 
void SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, const Distance &radius)
Update spherical coordinates (lat/lon/radius)
 
static QString coordinateTypeToString(CoordinateType type)
Converts the given SurfacePoint::CoordinateType enumeration to a string.
 
double LatToDouble(Latitude lat, CoordUnits units)
This method returns a double version of a Latitude in the specified units.
 
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
 
void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, const Distance &zSigma)
Set surface point and sigmas in rectangular coordinates and convert to planetocentric.
 
double GetLonWeight() const
Return longitude weight for bundle adjustment Units are 1/(radians)^2.
 
double DistanceToDouble(Distance dist, CoordUnits units)
This method returns a double version of a Distance in the specified units.
 
void SetSphericalSigmasDistance(const Distance &latSigma, const Distance &lonSigma, const Distance &radiusSigma)
Set the spherical sigmas (in Distance units) into the spherical variance/covariance matrix.
 
Distance GetLonSigmaDistance() const
Return the longitude sigma in meters.
 
double GetWeight(CoordinateType type, CoordIndex index)
This method returns the weight of a SurfacePoint coordinate Note: At this time a units argument is no...
 
void ToNaifArray(double naifOutput[3]) const
A naif array is a c-style array of size 3.
 
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.
 
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > * p_rectCovar
3x3 upper triangular covariance matrix rectangular coordinates
 
void ComputeLocalRadius()
Compute the local radius of the surface point.
 
Distance GetDistanceToPoint(const SurfacePoint &other) const
Computes and returns the distance between two surface points.
 
void SetSphericalSigmas(const Angle &latSigma, const Angle &lonSigma, const Distance &radiusSigma)
Set the spherical sigmas into the spherical variance/covariance matrix in diagonal units of radians^2...
 
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...
 
double MetersToLongitude(double lonLength)
This method returns an angular measure in radians of a distance in the direction of and relative to t...
 
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > * p_sphereCovar
3x3 upper triangular covariance matrix ocentric coordinates
 
~SurfacePoint()
Destroys a SurfacePoint object/.
 
void InitCovariance()
Initialize the variance/covariance matrices.
 
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.
 
double LongitudeToMeters(double longitude) const
This method returns a length in meters version of a delta longitude angle in radians relative to the ...
 
double GetZWeight() const
Return Z weight for bundle adjustment Units are 1/(kilometers)^2.
 
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
 
void SetSphericalMatrix(const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar, SurfacePoint::CoordUnits units=SurfacePoint::Meters)
Set spherical covariance matrix.
 
static CoordinateType stringToCoordinateType(QString type)
This method converts the given string value to a SurfacePoint::CoordinateType enumeration.
 
std::vector< double > RectangularDerivative(CoordIndex index)
Compute partial derivative of the body-fixed rectangular coordinates with respect to the indicated co...
 
double GetCoord(CoordinateType type, CoordIndex index, CoordUnits units)
This method returns a coordinate of a SurfacePoint.
 
double GetLocalRadiusWeight() const
Return radius weight for bundle adjustment Units are 1/(kilometers)^2.
 
double LatitudeToMeters(double latitude) const
This method returns a Displacement of an Angle relative to the current SurfacePoint latitude.
 
SurfacePoint()
Constructs an empty SurfacePoint object.
 
double MetersToLatitude(double latLength)
This method returns an angular measure of a distance in the direction of and relative to the latitude...
 
double DisplacementToDouble(Displacement disp, CoordUnits units)
This method returns a double version of a Displacement in the specified units.
 
double GetYWeight() const
Return Y weight for bundle adjustment Units are 1/(kilometers)^2.
 
double GetSigma(CoordinateType type, CoordIndex index, CoordUnits units)
This method returns a sigma of a SurfacePoint coordinate.
 
double GetLatWeight() const
Return latitude weight for bundle adjustment Units are 1/(radians)^2.
 
Distance GetSigmaDistance(CoordinateType type, CoordIndex index)
This method returns a sigma of a SurfacePoint coordinate as a Distance.
 
std::vector< double > Partial(CoordinateType type, CoordIndex index)
Compute partial derivative of conversion from body-fixed coordinates to the specified.
 
void SetRectangularMatrix(const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar, SurfacePoint::CoordUnits units=SurfacePoint::Meters)
Set rectangular covariance matrix and store in units of km**2.
 
void ResetLocalRadius(const Distance &radius)
This method resets the local radius of a SurfacePoint.
 
void FromNaifArray(const double naifValues[3])
A naif array is a c-style array of size 3.
 
double GetXWeight() const
Return X weight for bundle adjustment Units are 1/(kilometers)^2.
 
Distance GetLatSigmaDistance() const
Return the latitude sigma as a Distance.
 
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 GetLocalRadius() const
Return the radius of the surface point.
 
double LonToDouble(Longitude lon, CoordUnits units)
This method returns a double version of a Longitude in the specified units.
 
void InitPoint()
Initialize a surface point.
 
This is free and unencumbered software released into the public domain.