54 VimsGroundMap::VimsGroundMap(
Camera *parent,
Pvl &lab) :
65 IString msg =
"The Vims ground map does not understand cubes that "
66 "initially have more than 64 lines or 64 samples.";
135 QString stime = (QString) inst [
"NativeStartTime"];
136 QString intTime = stime.split(
".").first();
137 stime = stime.split(
".").last();
150 QString sampMode = QString((QString)inst [
"SamplingMode"]).toUpper();
153 int sampOffset = inst [
"XOffset"];
154 int lineOffset = inst [
"ZOffset"];
161 if (sampMode ==
"NORMAL") {
168 else if (sampMode ==
"HI-RES") {
178 string msg =
"Unsupported SamplingMode [" +
IString(sampMode) +
"]";
183 if (sampMode ==
"NORMAL") {
189 else if (sampMode ==
"HI-RES") {
198 string msg =
"Unsupported SamplingMode [" +
IString(sampMode) +
"]";
208 for (
int line = 0; line < p_camera->
ParentLines(); line++) {
222 for (
int samp = 0; samp < p_camera->
ParentSamples(); samp++) {
230 if (p_camera->
SetImage((
double) samp + 1, (
double)line + 1)) {
235 if (xyz[0] !=
Null && xyz[1] !=
Null && xyz[2] !=
Null) {
236 p_xyzMap[line][samp].setX(xyz[0]);
237 p_xyzMap[line][samp].setY(xyz[1]);
238 p_xyzMap[line][samp].setZ(xyz[2]);
247 if (xyz[0] < p_minX) p_minX = xyz[0];
248 if (xyz[0] > p_maxX) p_maxX = xyz[0];
249 if (xyz[1] < p_minY) p_minY = xyz[1];
250 if (xyz[1] > p_maxY) p_maxY = xyz[1];
251 if (xyz[2] < p_minZ) p_minZ = xyz[2];
252 if (xyz[2] > p_maxZ) p_maxZ = xyz[2];
266 p_camera->
radii(radii);
267 if (abs(abs(p_minZ) - radii[2].kilometers()) < 1.0) {
268 p_minZ = radii[2].
kilometers() * (int(abs(p_minZ) / p_minZ));
270 if (abs(abs(p_maxZ) - radii[2].kilometers()) < 1.0) {
271 p_maxZ = radii[2].
kilometers() * (int(abs(p_maxZ) / p_maxZ));
309 if ((imgLine < 0.5) || (imgLine > p_camera->
ParentLines() + 0.5) ||
310 (imgSamp < 0.5) || (imgSamp > p_camera->
ParentSamples() + 0.5)) {
331 SpiceDouble lookC[3];
334 SpiceDouble unitLookC[3];
335 vhat_c(lookC, unitLookC);
375 if (p_minX == DBL_MAX || p_maxX == -DBL_MAX ||
376 p_minY == DBL_MAX || p_maxY == -DBL_MAX ||
377 p_minZ == DBL_MAX || p_maxZ == -DBL_MAX)
return false;
385 double xCheck = radius * 0.001 * cos(lon.
radians());
386 double yCheck = radius * 0.001 * sin(lon.
radians());
399 if (pB[0] < p_minX || pB[0] > p_maxX ||
400 pB[1] < p_minY || pB[1] > p_maxY ||
401 pB[2] < p_minZ || pB[2] > p_maxZ)
return false;
408 double minDist = DBL_MAX;
413 for (
int line = 0; line < p_camera->
ParentLines(); line++) {
414 for (
int samp = 0; samp < p_camera->
ParentSamples(); samp++) {
416 if (p_xyzMap[line][samp].isNull())
continue;
419 QVector3D deltaXyz = xyz - p_xyzMap[line][samp];
420 if (deltaXyz.length() < minDist) {
421 minDist = deltaXyz.length();
433 if (minDist >= DBL_MAX)
return false;
444 vector<double> knownXyz(4);
447 for (
int line = minLine - 1; line < minLine + 2; line++) {
448 if (line < 0 || line > p_camera->
ParentLines() - 1)
continue;
449 for (
int samp = minSamp - 1; samp < minSamp + 2; samp++) {
451 if (samp < 0 || samp > p_camera->
ParentSamples() - 1)
continue;
452 if (p_xyzMap[line][samp].isNull())
continue;
454 knownXyz[0] = p_xyzMap[line][samp].x();
455 knownXyz[1] = p_xyzMap[line][samp].y();
456 knownXyz[2] = p_xyzMap[line][samp].z();
458 sampXyzLsq.
AddKnown(knownXyz, samp + 1);
459 lineXyzLsq.
AddKnown(knownXyz, line + 1);
463 if (sampXyzLsq.
Knowns() < 4)
return false;
469 knownXyz[0] = xyz.x();
470 knownXyz[1] = xyz.y();
471 knownXyz[2] = xyz.z();
473 double inSamp = sampXyzLsq.
Evaluate(knownXyz);
474 double inLine = lineXyzLsq.
Evaluate(knownXyz);
477 if (inSamp < 0.5 || inSamp > p_camera->
ParentSamples() + 0.5 ||
478 inLine < 0.5 || inLine > p_camera->
ParentLines() + 0.5) {
488 p_focalPlaneX = inSamp;
489 p_focalPlaneY = inLine;
532 v[0] = sin(theta) * cos(phi);
534 v[2] = sin(theta) * sin(phi) / -1.;