Пример #1
0
void cOriFromBundle::AnalyseSol(const ElMatrix<double> & aMat,const Pt3dr & aPA, const Pt3dr & aPB) const
{
     Pt3dr aBRor = aMat*aPB;
     ElSeg3D aSA(Pt3dr(0,0,0),aPA);
     ElSeg3D aSB(mBase,mBase+aBRor);

     Pt3dr anI = aSA.PseudoInter(aSB);

     double aAbsA = aSA.AbscOfProj(anI);
     double aAbsB = aSB.AbscOfProj(anI);
  
     std::cout << " "
               <<  ((aAbsA >0) ? "+ " : "- ")  
               <<  ((aAbsB >0) ? "+ " : "- ")  
               << " Z  " << aPA.z << " " << aBRor.z  << " " << anI.z << "\n";
}
Пример #2
0
cPIF_Bilin::cPIF_Bilin(cCamStenopeBilin *aCSB,cSetEqFormelles & aSet):
    cParamIntrinsequeFormel (false,aCSB,aSet,true),
    mSet                    (aSet),
    mFiged                  (false),
    mDistInit               (aCSB->DBL()),
    mDistCur                (aCSB->DBL()),
    mCurPIF                 (0),
    mFVDist                 (1+mDistCur.Nb().y),
    mQuads                  (mDistCur.Nb().y),
    mLastCase               (-1,-1)
{
    AllowUnsortedVarIn_SetMappingCur = true;
    SetFocFree(true);
    SetPPFree(true);
 
    for (int aK=0 ; aK<4 ; aK++)
    {
        mCornF.push_back(cP2d_Etat_PhgrF(std::string("Pts")+ToString(aK)));
    }

    int aCpt=0;
    // Pour initier dans unr ordre ou le premri quadrangle passe d'abord
    for (int aKD8=0 ; aKD8<=ElMax(mDistCur.Nb().y,mDistCur.Nb().x) ; aKD8++)
    {
        for (int aKY=0; aKY<=mDistCur.Nb().y ; aKY++)
        {
            for (int aKX=0; aKX<=mDistCur.Nb().x ; aKX++)
            {
                if (ElMax(aKX,aKY)==aKD8)
                {
                    if (aKY == (mDistCur.Nb().y/2))
                    {
                        if (aKX==0)
                           mIndFrozen0 = 2 * aCpt;
                        if (aKX==mDistCur.Nb().x)
                           mIndFrozen1 = 2 * aCpt;
                    }
                    cIncIntervale anInt(false,NameInterv(Pt2di(aKX,aKY)),aSet,2);
                // anInt.Close();
                    cSomBilin aSB(mSet,mDistCur.Dist(Pt2di(aKX,aKY)),anInt);
                // aSB.mPtF = mSet.Alloc().NewPt2(mDistCur.Dist(Pt2di(aKX,aKY)));
                    mFVDist[aKY].push_back(aSB);
                    aCpt++;
                // mFVDist.push_back(mSet.Alloc().NewPt2(mDistCur.Dist(Pt2di(aKX,aKY))));
                }
            }
        }
    }

    Pt2di aC;
    for (aC.y=0; aC.y<mDistCur.Nb().y ; aC.y++)
    {
        for (aC.x=0; aC.x<mDistCur.Nb().x ; aC.x++)
        {
             cIncIntervale  anI00(FDist(aC+CamBilinCorn[0]).mInterv,NameInterv(CamBilinCorn[0]));
             cIncIntervale  anI10(FDist(aC+CamBilinCorn[1]).mInterv,NameInterv(CamBilinCorn[1]));
             cIncIntervale  anI01(FDist(aC+CamBilinCorn[2]).mInterv,NameInterv(CamBilinCorn[2]));
             cIncIntervale  anI11(FDist(aC+CamBilinCorn[3]).mInterv,NameInterv(CamBilinCorn[3]));

             mQuads[aC.y].push_back(cQuadrangle(anI00,anI10,anI01,anI11));
        }
    }

    NV_UpdateCurPIF();
}