Polynome2dReal InvPolY(const Polynome2dReal & aPolY, REAL aDom,INT aDegre) { Polynome2dReal aPolX(1,aPolY.Ampl()); aPolX.SetDegre1(0,1,0); ElDistortionPolynomiale aDist( aPolX,aPolY); Polynome2dReal aRes = aDist.NewPolynLeastSquareInverse_OneCoord ( false, Box2dr(Pt2dr(0,0),Pt2dr(aDom,aDom)), aDegre ); return aRes; }
void cLEqHomOneDist::PondereFromErreur(REAL aDCut) { for (INT aK=0; aK<INT(mEqFs.size()) ; aK++) { cEqHomogFormelle * pEq = mEqFs[aK]; ElPackHomologue * pPack = mLiaisons[aK]; ElDistRadiale_PolynImpair aDist(1e5,Pt2dr(0,0)); if (pEq->DRF()) aDist = pEq->DRF()->DistCur(); cElHomographie aH1 = pEq->HF1().HomCur(); cElHomographie aH2 = pEq->HF2().HomCur(); for ( ElPackHomologue::iterator it= pPack->begin(); it!= pPack->end(); it++ ) { Pt2dr aQ1 = it->P1(); Pt2dr aQ2 = it->P2(); if (pEq->DRF()) { aQ1 = aDist.Direct(aQ1); aQ2 = aDist.Direct(aQ2); } Pt2dr aP1 = aH1.Direct(aQ1); Pt2dr aP2 = aH2.Direct(aQ2); REAL aD = euclid(aP1,aP2) * mDiag; REAL aPds = 1 / (1+ElSquare(aD/aDCut)); it->Pds() = aPds; } } }