31 #include "boost/numeric/ublas/symmetric.hpp" 32 #include "boost/numeric/ublas/io.hpp" 175 const Distance &radius);
177 const Distance &radius,
const Angle &latSigma,
const Angle &lonSigma,
178 const Distance &radiusSigma);
180 const Distance &radius,
181 const boost::numeric::ublas::symmetric_matrix
182 <
double,boost::numeric::ublas::upper>& covar);
183 SurfacePoint(
const Displacement &x,
const Displacement &y,
184 const Displacement &z);
185 SurfacePoint(
const Displacement &x,
const Displacement &y,
186 const Displacement &z,
const Distance &xSigma,
const Distance &ySigma,
187 const Distance &zSigma);
188 SurfacePoint(
const Displacement &x,
const Displacement &y,
189 const Displacement &z,
190 const boost::numeric::ublas::symmetric_matrix
191 <
double,boost::numeric::ublas::upper>& covar);
196 const Displacement &z,
const Distance &xSigma=Distance(),
197 const Distance &ySigma=Distance(),
const Distance &zSigma=Distance());
199 void SetRectangular(
const Displacement x,
const Displacement y,
const Displacement z,
200 const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
203 const Displacement &z);
207 const Distance &zSigma);
210 const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar,
211 SurfacePoint::CoordUnits units = SurfacePoint::Meters);
217 void SetSpherical (
const Latitude &lat,
const Longitude &lon,
218 const Distance &radius,
const Angle &latSigma=Angle(),
219 const Angle &lonSigma=Angle(),
220 const Distance &radiusSigma=Distance());
222 void SetSpherical (
const Latitude &lat,
const Longitude &lon,
223 const Distance &radius,
224 const boost::numeric::ublas::symmetric_matrix
225 <
double,boost::numeric::ublas::upper>& covar);
228 const Distance &radius);
231 const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar,
232 SurfacePoint::CoordUnits units = SurfacePoint::Meters);
235 const Distance &radiusSigma);
238 const Distance &lonSigma,
239 const Distance &radiusSigma);
248 const boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>& covar);
261 Displacement GetX()
const;
262 Displacement GetY()
const;
263 Displacement GetZ()
const;
264 Distance GetXSigma()
const;
265 Distance GetYSigma()
const;
266 Distance GetZSigma()
const;
270 boost::numeric::ublas::symmetric_matrix<double,boost::numeric::ublas::upper>
271 GetRectangularMatrix(SurfacePoint::CoordUnits units = SurfacePoint::Meters)
const;
275 Angle GetLatSigma()
const;
278 Angle GetLonSigma()
const;
281 Distance GetLocalRadiusSigma()
const;
283 boost::numeric::ublas::symmetric_matrix
284 <double,boost::numeric::ublas::upper> GetSphericalMatrix
285 (SurfacePoint::CoordUnits units = SurfacePoint::Meters)
const;
294 double LatToDouble(Latitude lat, CoordUnits units);
295 double LonToDouble(Longitude lon, CoordUnits units);
302 const Distance &sphereRadius)
const;
318 void SetRectangularPoint(
const Displacement &x,
const Displacement &y,
const Displacement &z);
319 void SetSphericalPoint(
const Latitude &lat,
const Longitude &lon,
const Distance &radius);
320 void FreeAllocatedMemory();
322 Distance p_localRadius;
327 boost::numeric::ublas::symmetric_matrix
330 boost::numeric::ublas::symmetric_matrix
This class defines a body-fixed surface point.
double LonToDouble(Longitude lon, CoordUnits units)
This method returns a double version of a Longitude in the specified units.
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > * p_sphereCovar
3x3 upper triangular covariance matrix ocentric coordinates
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 GetYWeight() const
Return Y weight for bundle adjustment Units are 1/(kilometers)^2.
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > * p_rectCovar
3x3 upper triangular covariance matrix rectangular coordinates
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.
Distance GetDistanceToPoint(const SurfacePoint &other) const
Computes and returns the distance between two surface points.
void ComputeLocalRadius()
Compute the local radius of the surface point.
double MetersToLatitude(double latLength)
This method returns an angular measure of a distance in the direction of and relative to the latitude...
~SurfacePoint()
Destroys a SurfacePoint object/.
void SetRectangularCoordinates(const Displacement &x, const Displacement &y, const Displacement &z)
Set surface point in rectangular coordinates.
Distance GetLatSigmaDistance() const
Return the latitude sigma as a Distance.
double GetSigma(CoordinateType type, CoordIndex index, CoordUnits units)
This method returns a sigma of a SurfacePoint coordinate.
void ResetLocalRadius(const Distance &radius)
This method resets the local radius of a SurfacePoint.
Distance GetLonSigmaDistance() const
Return the longitude sigma in meters.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
std::vector< double > LatitudinalDerivative(CoordIndex index)
Compute partial derivative of the conversion of the latitudinal coordinates to body-fixed rectangular...
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
double GetCoord(CoordinateType type, CoordIndex index, CoordUnits units)
This method returns a coordinate of a SurfacePoint.
void SetRectangularSigmas(const Distance &xSigma, const Distance &ySigma, const Distance &zSigma)
Set surface point and sigmas in rectangular coordinates and convert to planetocentric.
std::vector< double > RectangularDerivative(CoordIndex index)
Compute partial derivative of the body-fixed rectangular coordinates with respect to the indicated co...
double GetZWeight() const
Return Z weight for bundle adjustment Units are 1/(kilometers)^2.
void InitPoint()
Initialize a surface point.
Planetocentric latitudinal (lat/lon/rad) coordinates.
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 SetSphericalMatrix(const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar, SurfacePoint::CoordUnits units=SurfacePoint::Meters)
Set spherical covariance matrix.
void InitCovariance()
Initialize the variance/covariance matrices.
double LongitudeToMeters(double longitude) const
This method returns a length in meters version of a delta longitude angle in radians relative to the ...
std::vector< double > Partial(CoordinateType type, CoordIndex index)
Compute partial derivative of conversion from body-fixed coordinates to the specified.
double DisplacementToDouble(Displacement disp, CoordUnits units)
This method returns a double version of a Displacement in the specified units.
static QString coordinateTypeToString(CoordinateType type)
Converts the given SurfacePoint::CoordinateType enumeration to a string.
double MetersToLongitude(double lonLength)
This method returns an angular measure in radians of a distance in the direction of and relative to t...
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...
double GetLocalRadiusWeight() const
Return radius weight for bundle adjustment Units are 1/(kilometers)^2.
double LatToDouble(Latitude lat, CoordUnits units)
This method returns a double version of a Latitude in the specified units.
void SetMatrix(CoordinateType type, const boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &covar)
Set the covariance matrix.
Body-fixed rectangular x/y/z coordinates.
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
Distance GetSigmaDistance(CoordinateType type, CoordIndex index)
This method returns a sigma of a SurfacePoint coordinate as a Distance.
double GetLonWeight() const
Return longitude weight for bundle adjustment Units are 1/(radians)^2.
static CoordinateType stringToCoordinateType(QString type)
This method converts the given string value to a SurfacePoint::CoordinateType enumeration.
double LatitudeToMeters(double latitude) const
This method returns a Displacement of an Angle relative to the current SurfacePoint latitude...
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...
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
double GetXWeight() const
Return X weight for bundle adjustment Units are 1/(kilometers)^2.
void ToNaifArray(double naifOutput[3]) const
A naif array is a c-style array of size 3.
void FromNaifArray(const double naifValues[3])
A naif array is a c-style array of size 3.
double DistanceToDouble(Distance dist, CoordUnits units)
This method returns a double version of a Distance in the specified units.
Namespace for ISIS/Bullet specific routines.
void SetSphericalSigmasDistance(const Distance &latSigma, const Distance &lonSigma, const Distance &radiusSigma)
Set the spherical sigmas (in Distance units) into the spherical variance/covariance matrix...
SurfacePoint()
Constructs an empty SurfacePoint object.
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 SetSphericalCoordinates(const Latitude &lat, const Longitude &lon, const Distance &radius)
Update spherical coordinates (lat/lon/radius)
Distance GetLocalRadius() const
Return the radius of the surface point.
double GetLatWeight() const
Return latitude weight for bundle adjustment Units are 1/(radians)^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.