/*---------------------------------------------------------------------------*/
/* Calcule de l'ifs perso */
/*---------------------------------------------------------------------------*/
int calculifs (POINT tab[])
{
float valx[3],valy[3],valtransforme[3],valretour1[3];
int testok;
float val1=123.123,val2,val3,val4,val5,val6;
double valt;
valx[0]=400;
valy[0]=200;
valx[1]=300;
valy[1]=300;
valx[2]=500;
valy[2]=300;
valtransforme[0]=tab[0].x;
valtransforme[1]=tab[1].x;
valtransforme[2]=tab[2].x;
testok=resolutionifs(valx,valy,valtransforme,valretour1);
if(testok==-1)
{
return (-1);
}
if(compteurifsperso==0)
{
valt=valretour1[0]; //ici ca plante pas
val1=valretour1[0]; // mais ici ca plante !!!!
ifsperso1[0]=val1;
ifsperso1[1]=valretour1[1];
ifsperso1[4]=valretour1[2];
}
if(compteurifsperso==1)
{
ifsperso2[0]=valretour1[0];
ifsperso2[1]=valretour1[1];
ifsperso2[4]=valretour1[2];
}
if(compteurifsperso==2)
{
ifsperso3[0]=valretour1[0];
ifsperso3[1]=valretour1[1];
ifsperso3[4]=valretour1[2];
}
if(compteurifsperso==3)
{
ifsperso4[0]=valretour1[0];
ifsperso4[1]=valretour1[1];
ifsperso4[4]=valretour1[2];
}
valtransforme[0]=tab[0].y;
valtransforme[1]=tab[1].y;
valtransforme[2]=tab[2].y;
testok=resolutionifs(valx,valy,valtransforme,valretour1);
if(testok==-1)
{
return (-1);
}
if(compteurifsperso==0)
{
ifsperso1[2]=valretour1[0];
ifsperso1[2]=valretour1[1];
ifsperso1[5]=valretour1[2];
}
{
ifsperso2[2]=valretour1[0];
ifsperso2[2]=valretour1[1];
ifsperso2[5]=valretour1[2];
}
{
ifsperso3[2]=valretour1[0];
ifsperso3[2]=valretour1[1];
ifsperso3[5]=valretour1[2];
}
{
ifsperso4[2]=valretour1[0];
ifsperso4[2]=valretour1[1];
ifsperso4[5]=valretour1[2];
}
return(0);
}
/*---------------------------------------------------------------------------*/
/* Résolution de l'équation pour l'ifs perso */
/*---------------------------------------------------------------------------*/
int resolutionifs(float valx[],float valy[],float valtransforme[],float *valretour)
//valx contient les abcisses des 3 points d'origine
//valy contient les ordonnées des 3 points d'origine
//valtransforme contient une fois les abcisses des 3 nouveaux points
// et une autre les ordonnées des 3 nouveaux points
// la fontion gauss ne gère pas les coefficients égals à 0.
{
int n=3,j,k,test=0;
double matrice[4][3];
double resultat[10];
double temp,det;
int a,x;
int ligne,sol;
//Saisi des facteurs des equations ds matrice[][]
while(test==0)
{
matrice[0][0]=(double)valx[0];
matrice[0][1]=(double)valx[1];
matrice[0][2]=(double)valx[2];
matrice[1][0]=(double)valy[0];
matrice[1][1]=(double)valy[1];
matrice[1][2]=(double)valy[2];
matrice[2][0]=(double)1;
matrice[2][1]=(double)1;
matrice[2][2]=(double)1;
matrice[3][0]=(double)valtransforme[0];
matrice[3][1]=(double)valtransforme[1];
matrice[3][2]=(double)valtransforme[2];
//calcul du derterminant
det=(matrice[0][0]*matrice[1][1]*matrice[2][2])+(matrice[0][1]*matrice[1][2]*\
matrice[2][0])+(matrice[0][2]*matrice[1][0]*matrice[2][1])-(matrice[0][2]*\
matrice[1][1]*matrice[2][0])-(matrice[1][2]*matrice[2][1]*matrice[0][0])-\
(matrice[2][2]*matrice[0][1]*matrice[1][0]);
printf("le determinant de la matrice vaut : %.0f \n",det);
getch();
if( det!=0.0)
{
test=1;
}
else
{
return (-1) ;
}
}
// triangulation du systeme.
for(x=0;x<n-1;x++)
{
for(a=1+x;a<n;a++)
{
temp=matrice[x][a];
for (k=x;k<n+1;k++)
{
matrice[k][a]=matrice[k][a]*matrice[x][x]-matrice[k][x]*temp;
}
}
}
//Remplacage et résolution
resultat[n-1]=matrice[n][n-1]/matrice[n-1][n-1];
matrice[n][n-1]=0;
matrice[n-1][n-1]=0;
for (ligne=1;ligne<=n;ligne++)
{
for (sol=2;sol<=n;sol++)
{
matrice[n-ligne][n-sol]=matrice[n-ligne][n-sol]*resultat[n-ligne];
matrice[n][n-sol]=matrice[n][n-sol]-matrice[n-ligne][n-sol];
matrice[n-ligne][n-sol]=0;
}
resultat[n-(ligne+1)]=matrice[n][n-(ligne+1)]/matrice[n-(ligne+1)][n-(ligne+1)];
}
// Copie des résultats
for (j=0;j<n;j++)
{
valretour[j]=(float)(resultat[j]); //la je fais le cast et ca passe !!
}
return 0;
}
/*---------------------------------------------------------------------------*/
/* Résolution de l'équation pour l'ifs perso */
/* FIN */
/*---------------------------------------------------------------------------*/
l'erreur exat est :
Fault: access violation at 0x402f96: read of address 0x0
ifsperso1,2,3 et 4 sont declarés en globale
tableau de float