void rspfImageViewTransform::getViewToImageScale(rspfDpt& resultScale, const rspfDpt& viewPoint, const rspfDpt& deltaViewPointXY)const { rspfDpt p1 = viewPoint; rspfDpt p2(viewPoint.x + deltaViewPointXY.x, viewPoint.y); rspfDpt p3(viewPoint.x, viewPoint.y + deltaViewPointXY.y); rspfDpt transformedP1; rspfDpt transformedP2; rspfDpt transformedP3; viewToImage(p1, transformedP1); viewToImage(p2, transformedP2); viewToImage(p3, transformedP3); rspfDpt deltaP1P2 = transformedP1 - transformedP2; rspfDpt deltaP1P3 = transformedP1 - transformedP3; double sumSquaredSqrtP1P2 = sqrt((deltaP1P2.x*deltaP1P2.x) + (deltaP1P2.y*deltaP1P2.y)); double sumSquaredSqrtP1P3 = sqrt((deltaP1P3.x*deltaP1P3.x) + (deltaP1P3.y*deltaP1P3.y)); resultScale.x = 0; resultScale.y = 0; if(sumSquaredSqrtP1P2 > FLT_EPSILON) { resultScale.x = sumSquaredSqrtP1P2/deltaViewPointXY.x; } if(sumSquaredSqrtP1P3 > FLT_EPSILON) { resultScale.y = sumSquaredSqrtP1P3/deltaViewPointXY.y; } }
rspfDpt rspfImageViewTransform::viewToImage(const rspfDpt& viewPoint)const { rspfDpt tempPt; viewToImage(viewPoint, tempPt); return tempPt; }
ossimDpt ossimImageViewTransform::viewToImage(const ossimDpt& viewPoint)const { ossimDpt tempPt; viewToImage(viewPoint, tempPt); return tempPt; }
void ossimIvtGeomXform::viewToGround(const ossimDpt& viewPt, ossimGpt& gpt) { ossimDpt ipt; gpt.makeNan(); viewToImage(viewPt, ipt); if(!ipt.hasNans()) { imageToGround(ipt, gpt); } }
void ossimImageViewTransform::getViewToImageScale(ossimDpt& resultScale, const ossimDpt& viewPoint, const ossimDpt& deltaViewPointXY)const { ossimDpt p1 = viewPoint; ossimDpt p2(viewPoint.x + deltaViewPointXY.x, viewPoint.y); ossimDpt p3(viewPoint.x, viewPoint.y + deltaViewPointXY.y); ossimDpt transformedP1; ossimDpt transformedP2; ossimDpt transformedP3; viewToImage(p1, transformedP1); viewToImage(p2, transformedP2); viewToImage(p3, transformedP3); ossimDpt deltaP1P2 = transformedP1 - transformedP2; ossimDpt deltaP1P3 = transformedP1 - transformedP3; // now compute the distances. double sumSquaredSqrtP1P2 = sqrt((deltaP1P2.x*deltaP1P2.x) + (deltaP1P2.y*deltaP1P2.y)); double sumSquaredSqrtP1P3 = sqrt((deltaP1P3.x*deltaP1P3.x) + (deltaP1P3.y*deltaP1P3.y)); resultScale.x = 0; resultScale.y = 0; if(sumSquaredSqrtP1P2 > FLT_EPSILON) { resultScale.x = sumSquaredSqrtP1P2/deltaViewPointXY.x; } if(sumSquaredSqrtP1P3 > FLT_EPSILON) { resultScale.y = sumSquaredSqrtP1P3/deltaViewPointXY.y; } }
void rspfImageViewTransform::inverse(const rspfDpt& input, rspfDpt& output) const { viewToImage(input, output); }
void ossimImageViewTransform::inverse(const ossimDpt& input, ossimDpt& output) const { viewToImage(input, output); }