From cd1b6427db4ac11d25ce2200fcd6857ad4a815ee Mon Sep 17 00:00:00 2001
From: "K. Williams" <kewilliams@usgs.gov>
Date: Wed, 22 Aug 2018 15:34:45 -0700
Subject: [PATCH] Test camera model (#99)

* added observer x-distance test.

* added rotation tests.

* removed extra comments

* changed to use pi constant
---
 tests/FrameCameraTests.cpp | 94 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 93 insertions(+), 1 deletion(-)

diff --git a/tests/FrameCameraTests.cpp b/tests/FrameCameraTests.cpp
index 028134e..03e84db 100644
--- a/tests/FrameCameraTests.cpp
+++ b/tests/FrameCameraTests.cpp
@@ -250,4 +250,96 @@ TEST_F(FrameIsdTest, X1e9_SlightlyOffCenter) {
    EXPECT_NEAR(groundPt.y, 0.0, 1e-4);
    EXPECT_NEAR(groundPt.z, 1.99999200e+06, 1e-4);
    
-}
\ No newline at end of file
+}
+
+//Angle rotations:
+TEST_F(FrameIsdTest, Rotation_omegaPi_Center) {
+   std::string key = "omega";
+   std::ostringstream strval;
+   strval << std::setprecision(20) << M_PI;
+   isd.clearParams(key);
+   isd.addParam(key,strval.str());
+   UsgsAstroFramePlugin frameCameraPlugin;
+         
+   csm::Model *model = frameCameraPlugin.constructModelFromISD(
+         isd,
+         "USGS_ASTRO_FRAME_SENSOR_MODEL");
+   
+   UsgsAstroFrameSensorModel* sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model);
+   
+   ASSERT_NE(sensorModel, nullptr);
+   csm::ImageCoord imagePt(7.5, 7.5);
+   csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0);
+   EXPECT_NEAR(groundPt.x, -10.0, 1e-8);
+   EXPECT_NEAR(groundPt.y, 0.0, 1e-8);
+   EXPECT_NEAR(groundPt.z, 0.0, 1e-8);
+   
+}
+TEST_F(FrameIsdTest, Rotation_NPole_Center) {
+   std::string key = "phi";
+   std::ostringstream strval;
+   strval << std::setprecision(20) << -M_PI;
+   isd.clearParams(key);
+   isd.addParam(key,strval.str());
+   key = "x_sensor_origin";
+   std::string newValue = "0.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   key = "y_sensor_origin";
+   newValue = "0.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   key = "z_sensor_origin";
+   newValue = "1000.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   UsgsAstroFramePlugin frameCameraPlugin;
+         
+   csm::Model *model = frameCameraPlugin.constructModelFromISD(
+         isd,
+         "USGS_ASTRO_FRAME_SENSOR_MODEL");
+   
+   UsgsAstroFrameSensorModel* sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model);
+   
+   ASSERT_NE(sensorModel, nullptr);
+   csm::ImageCoord imagePt(7.5, 7.5);
+   csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0);
+   EXPECT_NEAR(groundPt.x, 0.0, 1e-8);
+   EXPECT_NEAR(groundPt.y, 0.0, 1e-8);
+   EXPECT_NEAR(groundPt.z, 10.0, 1e-8);
+   
+}
+TEST_F(FrameIsdTest, Rotation_SPole_Center) {
+   std::string key = "phi";
+   std::string newValue = "0.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   key = "x_sensor_origin";
+   newValue = "0.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   key = "y_sensor_origin";
+   newValue = "0.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   key = "z_sensor_origin";
+   newValue = "-1000.0";
+   isd.clearParams(key);
+   isd.addParam(key,newValue);
+   UsgsAstroFramePlugin frameCameraPlugin;
+         
+   csm::Model *model = frameCameraPlugin.constructModelFromISD(
+         isd,
+         "USGS_ASTRO_FRAME_SENSOR_MODEL");
+   
+   UsgsAstroFrameSensorModel* sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model);
+   
+   ASSERT_NE(sensorModel, nullptr);
+   csm::ImageCoord imagePt(7.5, 7.5);
+   csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0);
+   EXPECT_NEAR(groundPt.x, 0.0, 1e-8);
+   EXPECT_NEAR(groundPt.y, 0.0, 1e-8);
+   EXPECT_NEAR(groundPt.z, -10.0, 1e-8);
+
+}
+
-- 
GitLab