Isis 3 Programmer Reference
CameraFocalPlaneMap.cpp
1
6/* SPDX-License-Identifier: CC0-1.0 */
7#include "CameraFocalPlaneMap.h"
8
9#include <cmath>
10
11#include <QDebug>
12#include <QVector>
13
14#include "Affine.h"
15#include "Camera.h"
16#include "Spice.h"
17
18namespace Isis {
25 CameraFocalPlaneMap::CameraFocalPlaneMap(Camera *parent, const int naifIkCode) {
26 Init(parent, naifIkCode);
27 }
28
29
36 Init(0, naifIkCode);
37 }
38
39
54 p_camera = parent;
55
56 p_transx[0] = affine.Coefficients(1)[2];
57 p_transx[1] = affine.Coefficients(1)[0];
58 p_transx[2] = affine.Coefficients(1)[1];
59
60 p_transy[0] = affine.Coefficients(2)[2];
61 p_transy[1] = affine.Coefficients(2)[0];
62 p_transy[2] = affine.Coefficients(2)[1];
63
64 p_itranss[0] = affine.InverseCoefficients(1)[2];
65 p_itranss[1] = affine.InverseCoefficients(1)[0];
66 p_itranss[2] = affine.InverseCoefficients(1)[1];
67
68 p_itransl[0] = affine.InverseCoefficients(2)[2];
69 p_itransl[1] = affine.InverseCoefficients(2)[0];
70 p_itransl[2] = affine.InverseCoefficients(2)[1];
71
72 if (parent != 0) {
74 }
75 }
76
77
84
85
92 void CameraFocalPlaneMap::Init(Camera *parent, const int naifIkCode) {
97 p_camera = parent;
98
99 if (naifIkCode != 0) {
100 QString xkey = "INS" + toString(naifIkCode) + "_TRANSX";
101 QString ykey = "INS" + toString(naifIkCode) + "_TRANSY";
102 QString ixkey = "INS" + toString(naifIkCode) + "_ITRANSS";
103 QString iykey = "INS" + toString(naifIkCode) + "_ITRANSL";
104 for (int i = 0; i < 3; ++i) {
105 p_transx[i] = parent->getDouble(xkey, i);
106 p_transy[i] = parent->getDouble(ykey, i);
107 p_itranss[i] = parent->getDouble(ixkey, i);
108 p_itransl[i] = parent->getDouble(iykey, i);
109 }
110 }
111 else {
112 QString xkey = "IDEAL_TRANSX";
113 QString ykey = "IDEAL_TRANSY";
114 QString ixkey = "IDEAL_TRANSS";
115 QString iykey = "IDEAL_TRANSL";
116 for (int i = 0; i < 3; ++i) {
117 p_transx[i] = parent->getDouble(xkey, i);
118 p_transy[i] = parent->getDouble(ykey, i);
119 p_itranss[i] = parent->getDouble(ixkey, i);
120 p_itransl[i] = parent->getDouble(iykey, i);
121 }
122 }
123
124 if (parent != 0) {
126 }
127 }
128
129
143 bool CameraFocalPlaneMap::SetFocalPlane(const double dx, const double dy) {
144 p_focalPlaneX = dx;
145 p_focalPlaneY = dy;
146
147 p_centeredDetectorSample = p_itranss[0] + (p_itranss[1] * dx) + (p_itranss[2] * dy);
148 p_centeredDetectorLine = p_itransl[0] + (p_itransl[1] * dx) + (p_itransl[2] * dy);
150 return true;
151 }
152
153
164 bool CameraFocalPlaneMap::SetDetector(const double sample, const double line) {
165 p_detectorSample = sample;
166 p_detectorLine = line;
170 return true;
171 }
172
173
181// CameraFocalPlaneMap::FocalPlaneXDependencyType CameraFocalPlaneMap::FocalPlaneXDependency() {
183 if (p_transx[1] > p_transx[2]) {
184 return Sample;
185 }
186 else {
187 return Line;
188 }
189 }
190
191
202 double magCoef1 = fabs(p_transx[1]);
203 double magCoef2 = fabs(p_transx[2]);
204
205 if (magCoef1 > magCoef2) {
206 return (magCoef1 / p_transx[1]);
207 }
208 else {
209 return (magCoef2 / p_transx[2]);
210 }
211 }
212
213
224 double magCoef1 = fabs(p_transy[1]);
225 double magCoef2 = fabs(p_transy[2]);
226
227 if (magCoef1 > magCoef2) {
228 return (magCoef1 / p_transy[1]);
229 }
230 else {
231 return (magCoef2 / p_transy[2]);
232 }
233 }
234
235
240 return p_focalPlaneX;
241 }
242
243
248 return p_focalPlaneY;
249 }
250
251
256 return p_detectorSample;
257 }
258
259
264 return p_detectorLine;
265 }
266
267
274
275
282
283
293 void CameraFocalPlaneMap::SetDetectorOrigin(const double sample, const double line) {
294 p_detectorSampleOrigin = sample;
296 }
297
298
305
306
313
314
324 void CameraFocalPlaneMap::SetDetectorOffset(const double sampleOffset,
325 const double lineOffset) {
326 p_detectorSampleOffset = sampleOffset;
327 p_detectorLineOffset = lineOffset;
328 }
329
330
337
338
345
346
352 void CameraFocalPlaneMap::SetTransL(const QVector<double> transL) {
353 for (int i=0; i<3; ++i) {
354 p_itransl[i] = transL[i];
355 }
356 }
357
358
364 void CameraFocalPlaneMap::SetTransS(const QVector<double> transS) {
365 for (int i=0; i<3; ++i) {
366 p_itranss[i] = transS[i];
367 }
368 }
369
370
376 void CameraFocalPlaneMap::SetTransX(const QVector<double> transX) {
377 for (int i=0; i<3; ++i) {
378 p_transx[i] = transX[i];
379 }
380 }
381
382
388 void CameraFocalPlaneMap::SetTransY(const QVector<double> transY) {
389 for (int i=0; i<3; ++i) {
390 p_transy[i] = transY[i];
391 }
392 }
393
394
398 const double *CameraFocalPlaneMap::TransX() const{
399 return p_transx;
400 }
401
402
406 const double *CameraFocalPlaneMap::TransY() const{
407 return p_transy;
408 }
409
410
414 const double *CameraFocalPlaneMap::TransS() const{
415 return p_itranss;
416 }
417
418
422 const double *CameraFocalPlaneMap::TransL() const{
423 return p_itransl;
424 }
425
426
432
433
439
440}
441
Affine basis function.
Definition Affine.h:65
int FocalPlaneXDependency()
Return the focal plane x dependency variable.
void ComputeUncentered()
Convenience method to center detector origin (use when inheriting)
Camera * p_camera
Camera of the image.
double p_itranss[3]
The x transition from distorted to detector.
void SetDetectorOffset(const double sampleOffset, const double lineOffset)
Set the detector offset.
const double * TransL() const
double SignMostSigY()
Return the sign of the p_transy coefficient with the greatest magnitude.
double p_transx[3]
The x transition from detector to distorted.
double p_detectorLineOrigin
The origin line of the detector.
void Init(Camera *parent, const int naifIkCode)
Initialize the focal plane map to its default state.
void SetTransS(const QVector< double > transS)
Set the affine coefficients for converting destorted (x,y) to a detector Sample.
double p_detectorSample
sample value of the detector
void SetTransL(const QVector< double > transL)
Set the affine coefficients for converting destorted (x,y) to a detector Line.
virtual bool SetDetector(const double sample, const double line)
Compute distorted focal plane coordinate from detector position (sampel,line)
double p_centeredDetectorLine
Detector line position.
void SetDetectorOrigin(const double sample, const double line)
Set the detector origin.
void SetTransX(const QVector< double > transX)
Set the affine coefficients for converting detector (sample,line) to a distorted X.
double p_itransl[3]
The y transition from distorted to detector.
void SetTransY(const QVector< double > transY)
Set the affine coefficients for converting detector (sample,line) to a distorted Y.
double p_transy[3]
The y transition from detector to distorted.
double p_detectorSampleOrigin
The origin sample of the detector.
double p_focalPlaneY
y value of focal plane coordinate
double p_detectorSampleOffset
offset of the detector origin sample from the average
@ Line
The x value of the focal plane maps to a line.
@ Sample
The x value of the focal plane maps to a sample.
virtual ~CameraFocalPlaneMap()
Destructor.
double p_detectorLineOffset
Offset of the detector origin line from the average.
const double * TransY() const
virtual bool SetFocalPlane(const double dx, const double dy)
Compute detector position (sample,line) from focal plane coordinates.
const double * TransX() const
const double * TransS() const
double p_focalPlaneX
x value of focal plane coordinate
double SignMostSigX()
Return the sign of the p_transx coefficient with the greatest magnitude.
void ComputeCentered()
Convenience method to center detector origin (use when inheriting)
CameraFocalPlaneMap(Camera *parent, const int naifIkCode)
Construct mapping between detectors and focal plane x/y.
double p_centeredDetectorSample
Detector sample position.
double p_detectorLine
line value of the detector
void SetFocalPlaneMap(CameraFocalPlaneMap *map)
Sets the Focal Plane Map.
Definition Camera.cpp:2387
SpiceDouble getDouble(const QString &key, int index=0)
This returns a value from the NAIF text pool.
Definition Spice.cpp:1046
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
Definition IString.cpp:211