예제 #1
0
파일: 5262.c 프로젝트: Kerilkalgan/Project
int Det(int **mas, int m) 
{
  int i,j,d,k,n;
  int **p;
  p = (int**)malloc(sizeof(int*)*m);
  for(i=0;i<m;i++)
    p[i] = (int*)malloc(sizeof(int)*m);
    j=0; d=0;
    k=1; 
    n=m-1;
  if (m<1)  
  {

  return 0;
						}
  if (m==1) {
    d = mas[0][0];
    return(d);
  }
  if (m==2) {
    d=mas[0][0]*mas[1][1]-(mas[1][0]*mas[0][1]);
    return(d);
  }
  if (m>2){
    for (i=0;i<m;i++) {
      GetMatr(mas,p,i,0,m);
      printf("%d ", mas[i][j]);
      PrintMatr(p,n);
      d = d + k * mas[i][0] * Det(p,n);
      k=-k;
    }
  }
  return(d);
}
void cModeleAnalytiqueComp::MakeExport()
{
   if (!mModele.MakeExport().Val())
      return;

    cMatrCorresp * pMatr = GetMatr(mModele.PasCalcul(),mModele.PointUnique().Val());

    const ElPackHomologue *  aPackIn =0;
    ElPackHomologue  aPackRef;
    ElPackHomologue  aNewPack;
    if (mModele.UseHomologueReference().Val())
    {
        aPackRef =  mAppli.PDV1()->ReadPackHom(mAppli.PDV2());
        aPackIn = & aPackRef;
    }
    else
    {
        aPackIn = & pMatr->PackHomCorr();
    }
 

    /* 
     *      FILTRAGE EVENTUEL DES POINTS HOMOLOGUES 
    */

    double aTol = mAppli.TolerancePointHomInImage().Val();
    double aFiltre = mAppli.FiltragePointHomInImage().Val();

    bool GotOut = false;

   
    switch (mModele.TypeModele())
    {

         case eTMA_Homologues :
              SauvHomologues(pMatr->PackHomInit());
         break;
         
         case eTMA_DHomD :
	 // std::cout << "PKS = " << aPackIn->size() << "\n"; getchar();
              SolveHomographie(*aPackIn);
              SauvHomologues(pMatr->PackHomInit());
         break;

         case eTMA_Ori :
         {
              if ((aTol<1e10) || (aFiltre !=0))
              {
                  GotOut = FiltragePointHomologues(pMatr->PackHomInit(),aNewPack,aTol,aFiltre);
                  aPackIn = &  aNewPack;
              }
              SauvHomologues(pMatr->PackHomInit());
	      if (mModele.AffineOrient().Val())
	      {
                 cMA_AffineOrient  aMAAO
                                (
                                    mAppli,
                                    *this,
                                    mGeoTer,
                                    mModele.L1CalcOri().Val(),
                                    pMatr->Sz(),
                                    *aPackIn
                                 );
              // SauvHomologues(*aPackIn);
                 if (mModele.MakeImagePxRef().Val())
                 {
                    aMAAO.MakeImagePxRef();
                 }
	      }
         }
         break;


	 case eTMA_Nuage3D :
	 {
	     std::string aNameRes =   std::string("Nuage3D")
	                            + mAppli.NameChantier() 
				    + std::string(".tif");
	     if (mModele.KeyNuage3D().IsInit())
	     {
	        aNameRes = mAppli.ICNM()->Assoc1To1
		           (
                               mModele.KeyNuage3D().Val(),
                               mAppli.NameChantier(),
                               true
                           );
	     }
	     aNameRes = mAppli.FullDirResult() + aNameRes;
	     Tiff_Im aFile
	             (
		         aNameRes.c_str(),
			 pMatr->ImAppX().sz(),
			 GenIm::real4,
			 Tiff_Im::No_Compr,
			 Tiff_Im::PtDAppuisDense
		     );
             ELISE_COPY
	     (
	          aFile.all_pts(),
		  Virgule
		  (
                      pMatr->ImPds().in(),
                      pMatr->ImAppX().in(),
                      pMatr->ImAppY().in(),
                      pMatr->ImAppZ().in()
		  ),
		  aFile.out()
	     );

	 }

         break;


         default :
            ELISE_ASSERT(false,"TypeModeleAnalytique Non Traite");
         break;
    }
    delete pMatr;
    if (GotOut)
    {
         mAppli.MicMacErreur
         (
            eErrPtHomHorsImage,
            "Point Homologue Hors Image",
            "Specification Utilisateur sur la Tolerance : <TolerancePointHomInImage>"
         );
    }
}