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;
}
Exemple #2
0
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;
       }
   }
}