Skip to content
Snippets Groups Projects
Commit d8434c15 authored by Jesse Mapel's avatar Jesse Mapel Committed by jlaura
Browse files

Made framer inherit from settable ellipsoid (#228)

* Made framer inherit from settable ellipsoid

* Added radii tests
parent 9598b19b
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include "RasterGM.h" #include "RasterGM.h"
#include <SettableEllipsoid.h>
#include "CorrelationModel.h" #include "CorrelationModel.h"
#include "Distortion.h" #include "Distortion.h"
#include "Utilities.h" #include "Utilities.h"
...@@ -18,7 +19,7 @@ ...@@ -18,7 +19,7 @@
using json = nlohmann::json; using json = nlohmann::json;
class UsgsAstroFrameSensorModel : public csm::RasterGM { class UsgsAstroFrameSensorModel : public csm::RasterGM, virtual public csm::SettableEllipsoid {
// UsgsAstroFramePlugin needs to access private members // UsgsAstroFramePlugin needs to access private members
friend class UsgsAstroFramePlugin; friend class UsgsAstroFramePlugin;
...@@ -288,6 +289,16 @@ class UsgsAstroFrameSensorModel : public csm::RasterGM { ...@@ -288,6 +289,16 @@ class UsgsAstroFrameSensorModel : public csm::RasterGM {
// If the argument state string is empty, the model remains unchanged. // If the argument state string is empty, the model remains unchanged.
//< //<
// Implement methods from the SettableEllipsoid class
virtual csm::Ellipsoid getEllipsoid() const;
//> This method returns the planetary ellipsoid.
//<
virtual void setEllipsoid(const csm::Ellipsoid &ellipsoid);
//> This method sets the planetary ellipsoid.
//<
// IMPLEMENT GEOMETRICMODEL PURE VIRTUALS // IMPLEMENT GEOMETRICMODEL PURE VIRTUALS
// See GeometricModel.h for documentation // See GeometricModel.h for documentation
virtual csm::EcefCoord getReferencePoint() const; virtual csm::EcefCoord getReferencePoint() const;
......
...@@ -1170,6 +1170,21 @@ std::vector<double> UsgsAstroFrameSensorModel::getCrossCovarianceMatrix( ...@@ -1170,6 +1170,21 @@ std::vector<double> UsgsAstroFrameSensorModel::getCrossCovarianceMatrix(
} }
csm::Ellipsoid UsgsAstroFrameSensorModel::getEllipsoid() const {
MESSAGE_LOG(this->m_logger, "Accessing ellipsoid radii {} {}",
m_majorAxis, m_minorAxis);
return csm::Ellipsoid(m_majorAxis, m_minorAxis);
}
void UsgsAstroFrameSensorModel::setEllipsoid(const csm::Ellipsoid &ellipsoid) {
MESSAGE_LOG(this->m_logger, "Setting ellipsoid radii {} {}",
ellipsoid.getSemiMajorRadius(), ellipsoid.getSemiMinorRadius());
m_majorAxis = ellipsoid.getSemiMajorRadius();
m_minorAxis = ellipsoid.getSemiMinorRadius();
}
void UsgsAstroFrameSensorModel::calcRotationMatrix( void UsgsAstroFrameSensorModel::calcRotationMatrix(
double m[3][3]) const { double m[3][3]) const {
MESSAGE_LOG(this->m_logger, "Calculating rotation matrix"); MESSAGE_LOG(this->m_logger, "Calculating rotation matrix");
......
...@@ -95,6 +95,20 @@ TEST_F(OrbitalFrameSensorModel, Center) { ...@@ -95,6 +95,20 @@ TEST_F(OrbitalFrameSensorModel, Center) {
EXPECT_DOUBLE_EQ(groundPt.z, 0); EXPECT_DOUBLE_EQ(groundPt.z, 0);
} }
TEST_F(FrameSensorModel, Radii) {
csm::Ellipsoid ellipsoid = sensorModel->getEllipsoid();
EXPECT_DOUBLE_EQ(ellipsoid.getSemiMajorRadius(), 10);
EXPECT_DOUBLE_EQ(ellipsoid.getSemiMinorRadius(), 10);
}
TEST_F(FrameSensorModel, SetRadii) {
csm::Ellipsoid ellipsoid1(1000, 1500);
sensorModel->setEllipsoid(ellipsoid1);
csm::Ellipsoid ellipsoid2 = sensorModel->getEllipsoid();
EXPECT_DOUBLE_EQ(ellipsoid2.getSemiMajorRadius(), 1000);
EXPECT_DOUBLE_EQ(ellipsoid2.getSemiMinorRadius(), 1500);
}
TEST_F(OrbitalFrameSensorModel, GroundPartials) { TEST_F(OrbitalFrameSensorModel, GroundPartials) {
csm::EcefCoord groundPt(1000000.0, 0.0, 0.0); csm::EcefCoord groundPt(1000000.0, 0.0, 0.0);
std::vector<double> partials = sensorModel->computeGroundPartials(groundPt); std::vector<double> partials = sensorModel->computeGroundPartials(groundPt);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment