void ImRON2ParmEllipse
     (
         REAL & A,
         REAL & B,
         REAL & C,
	 const Pt2dr & aV0,
	 const Pt2dr & aV1
     )
{
   ElMatrix<REAL> aMat(2,2);
   SetCol(aMat,0,aV0);
   SetCol(aMat,1,aV1);

   aMat = gaussj(aMat);
   aMat = aMat.transpose() * aMat;

   ElMatrix<REAL> aVecP(2,2);
   ElMatrix<REAL> aValP(2,2);

   jacobi_diag(aMat,aValP,aVecP);


    aValP(0,0) = sqrt(aValP(0,0));
    aValP(1,1) = sqrt(aValP(1,1));

    ElMatrix<REAL> aABC = aVecP * aValP * aVecP.transpose();

    A = aABC(0,0);
    B = aABC(1,0);
    C = aABC(1,1);
}
Exemple #2
0
void cResOptInterFaisceaux::Init(const ElMatrix<double> & aMat)
{
   ElMatrix<double> aVecP(3,3),aValP(1,3);
   std::vector<int> aInd = jacobi(aMat,aValP,aVecP);

    mVal1 = aValP(aInd[0],0);
    mVal2 = aValP(aInd[1],0);
    mVal3 = aValP(aInd[2],0);

    aVecP.GetCol(aInd[0],mVec1);
    aVecP.GetCol(aInd[1],mVec2);
    aVecP.GetCol(aInd[2],mVec3);
}
bool EllipseEq2ParamPhys
     (
         REAL  & V1,
         REAL  & V2,
         REAL  & teta,
         REAL  A,
         REAL  B,
         REAL  C
     )
{
   ElMatrix<REAL> aMat(2,2);
   aMat(0,0) = A;
   aMat(1,0) = B;
   aMat(0,1) = B;
   aMat(1,1) = C;

   ElMatrix<REAL> aVecP(2,2);
   ElMatrix<REAL> aValP(2,2);

   jacobi_diag(aMat,aValP,aVecP);
   if ((aValP(0,0) <=0) || (aValP(1,1) <= 0))
       return false;
   V1 = 1 / aValP(0,0);
   V2 = 1 / aValP(1,1);
   teta = angle(Pt2dr(aVecP(0,0),aVecP(0,1)));

   if (V1 < V2)
   {
      ElSwap(V1,V2);
      teta += PI/2;
      if (teta> PI)
         teta -= PI;
   }

   return true;
}