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 @@
#include <iostream>
#include <vector>
#include "RasterGM.h"
#include <SettableEllipsoid.h>
#include "CorrelationModel.h"
#include "Distortion.h"
#include "Utilities.h"
......@@ -18,7 +19,7 @@
using json = nlohmann::json;
class UsgsAstroFrameSensorModel : public csm::RasterGM {
class UsgsAstroFrameSensorModel : public csm::RasterGM, virtual public csm::SettableEllipsoid {
// UsgsAstroFramePlugin needs to access private members
friend class UsgsAstroFramePlugin;
......@@ -288,6 +289,16 @@ class UsgsAstroFrameSensorModel : public csm::RasterGM {
// 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
// See GeometricModel.h for documentation
virtual csm::EcefCoord getReferencePoint() const;
......
......@@ -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(
double m[3][3]) const {
MESSAGE_LOG(this->m_logger, "Calculating rotation matrix");
......
......@@ -95,6 +95,20 @@ TEST_F(OrbitalFrameSensorModel, Center) {
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) {
csm::EcefCoord groundPt(1000000.0, 0.0, 0.0);
std::vector<double> partials = sensorModel->computeGroundPartials(groundPt);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment