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>" ); } }