void CVecTests::ShouldNormalizeItself() { CVec xVector(100,0,0); xVector.normalize(); QVERIFY2(xVector.x() == 1.0, "X component should be normalize to 1.0"); CVec yVector(0,100,0); yVector.normalize(); QVERIFY2(yVector.y() == 1.0, "Y component should be normalize to 1.0"); CVec zVector(0,0,100); zVector.normalize(); QVERIFY2(zVector.z() == 1.0, "Z component should be normalize to 1.0"); }
void ossimApplanixUtmModel::updateModel() { ossimGpt wgs84Pt; double metersPerDegree = wgs84Pt.metersPerDegree().x; double degreePerMeter = 1.0/metersPerDegree; double latShift = -computeParameterOffset(1)*theMeanGSD*degreePerMeter; double lonShift = computeParameterOffset(0)*theMeanGSD*degreePerMeter; ossimGpt gpt = thePlatformPosition; // gpt.height(0.0); double height = gpt.height(); gpt.height(height + computeParameterOffset(5)); gpt.latd(gpt.latd() + latShift); gpt.lond(gpt.lond() + lonShift); theAdjEcefPlatformPosition = gpt; ossimLsrSpace lsrSpace(theAdjEcefPlatformPosition); // ORIENT TO A UTM AXIS // NEWMAT::ColumnVector v(3); v[0] = 0.0; v[1] = 0.0; v[2] = 1.0; NEWMAT::ColumnVector v2 = lsrSpace.lsrToEcefRotMatrix()*v; ossimEcefVector zVector(v2[0], v2[1], v2[2]); zVector.normalize(); // now lets create a UTM axis by creating a derivative at the center // by shift over a few pixels and subtracting // ossimUtmProjection utmProj; utmProj.setZone(theUtmZone); utmProj.setZone(theUtmHemisphere); utmProj.setMetersPerPixel(ossimDpt(1.0,1.0)); ossimDpt midPt = utmProj.forward(theAdjEcefPlatformPosition); ossimDpt rPt = midPt + ossimDpt(10, 0.0); ossimDpt uPt = midPt + ossimDpt(0.0, 10.0); ossimGpt wMidPt = utmProj.inverse(midPt); ossimGpt wRPt = utmProj.inverse(rPt); ossimGpt wUPt = utmProj.inverse(uPt); ossimEcefPoint ecefMidPt = wMidPt; ossimEcefPoint ecefRPt = wRPt; ossimEcefPoint ecefUPt = wUPt; ossimEcefVector east = ecefRPt-ecefMidPt; ossimEcefVector north = ecefUPt-ecefMidPt; east.normalize(); north.normalize(); // now use the lsr space constructors to construct an orthogonal set of axes // lsrSpace = ossimLsrSpace(thePlatformPosition, 0, north, east.cross(north)); // lsrSpace = ossimLsrSpace(thePlatformPosition); // DONE ORIENT TO UTM AXIS NEWMAT::Matrix platformLsrMatrix = lsrSpace.lsrToEcefRotMatrix(); NEWMAT::Matrix orientationMatrix = (ossimMatrix3x3::createRotationXMatrix(theOmega+computeParameterOffset(2), OSSIM_LEFT_HANDED)* ossimMatrix3x3::createRotationYMatrix(thePhi+computeParameterOffset(3), OSSIM_LEFT_HANDED)* ossimMatrix3x3::createRotationZMatrix(theKappa+computeParameterOffset(4), OSSIM_LEFT_HANDED)); theCompositeMatrix = platformLsrMatrix*orientationMatrix; theCompositeMatrixInverse = theCompositeMatrix.i(); // theAdjEcefPlatformPosition = theEcefPlatformPosition; theBoundGndPolygon.resize(4); ossim_float64 w = theImageClipRect.width()*2.0; ossim_float64 h = theImageClipRect.height()*2.0; lineSampleToWorld(theImageClipRect.ul()+ossimDpt(-w, -h), gpt); theBoundGndPolygon[0] = gpt; lineSampleToWorld(theImageClipRect.ur()+ossimDpt(w, -h), gpt); theBoundGndPolygon[1] = gpt; lineSampleToWorld(theImageClipRect.lr()+ossimDpt(w, h), gpt); theBoundGndPolygon[2] = gpt; lineSampleToWorld(theImageClipRect.ll()+ossimDpt(-w, h), gpt); theBoundGndPolygon[3] = gpt; }