un problème dans une équation c++

un problème dans une équation c++ - C++ - Programmation

Marsh Posté le 18-01-2007 à 14:39:06    

j'ai en fait un problème lors de debuger mon programme et c'est dans cette fonction ou il se trouve le problème, mais quand je fais un Build pour mon programme il y 0 erreur, donc si quelqu'un pourra m'aider à trouver ce problème dans cet méthode:

Code :
  1. void AccumulateLaplacian()//X+Lambdadt*Laplacian
  2.  {
  3.   double X[3],Lambdadt=10;
  4.   this->AllocateTable();//ici je fais un appel à la méthode qui me fait l'allocation des tableaux TablePoints,TableLaplacian,Accumulate
  5. for (int i=0; i<this->Input->GetNumberOfPoints(); i++)
  6.   {
  7.    X[0]=TablePoints[i][0];
  8.    X[1]=TablePoints[i][1];
  9.    X[2]=TablePoints[i][2];
  10.    this->ComputeLaplacian();//je fais un appel à la méthode qui me fais le calcul de laplacienne
  11.   }
  12.    Accumulate[i][0]=X[0]+Lambdadt*TableLaplacian[i][0];//et c'est ici ou il se trouve mon problème  
  13.    Accumulate[i][1]=X[1]+Lambdadt*TableLaplacian[i][1];//c'est une équation qui fait X[0]+Lambdadt*L(X)
  14.    Accumulate[i][2]=X[2]+Lambdadt*TableLaplacian[i][2];//et je mets le résultat dans un tableau
  15.  }


merci en avance pour vos réponses

Reply

Marsh Posté le 18-01-2007 à 14:39:06   

Reply

Marsh Posté le 18-01-2007 à 15:01:28    

y a plein de trucs bizarres dans ton code :

  • ligne 13: comment ComputeLaplacian() est-elle au courant de la valeur de X. Si ComputeLaplacian() n'utilise pas X, pourquoi l'appeler à l'intérieur de la boucle ?
  • ligne 16-18: i n'est plus défini à cet endroit là


je ne comprends pas grand chose à ce que tu veux faire, mais il me semble qu'un truc dans ce genre là aurait plus de sens :

Code :
  1. this->AllocateTable();
  2. this->ComputeLaplacian(); // gros point d'interrogation ici: quelles sont les données utilisée pour le calcul du laplacien ?
  3. for( int i=0 ; ... )
  4. {
  5.   Accumulate[i][0] = Points[i][0] + Lambda*Laplacian[i][0];
  6.   Accumulate[i][1] = Points[i][1] + Lambda*Laplacian[i][1];
  7.   Accumulate[i][2] = Points[i][2] + Lambda*Laplacian[i][2];
  8. }


 
essaie de nous expliquer plus clairement ce que tu veux faire, et quelles sont les données que tu manipules...


---------------
TriScale innov
Reply

Marsh Posté le 18-01-2007 à 15:22:19    

voilà je te mets tout le programme c'est mieux  
 

Code :
  1. class vtkImplicitFairing
  2. {
  3. public:
  4. void SetInput(vtkSurface *Input) {this->Input=Input;};
  5. double X[3];
  6. double** TableLaplacian;
  7. double** TablePoints;
  8. double** Accumulate;
  9. void AllocateTable()
  10. {
  11. TablePoints = new double* [this->Input->GetNumberOfPoints()];
  12. Accumulate=new double* [this->Input->GetNumberOfPoints()];
  13. TableLaplacian = new double* [this->Input->GetNumberOfPoints()];
  14. for (int i=0;i<this->Input->GetNumberOfPoints();i++)
  15. {
  16.     TablePoints[i]=new double[3] ;
  17. TableLaplacian[i]=new double[3] ;
  18. Accumulate[i]=new double[3] ;
  19. }
  20. }
  21. void TableCoordinates()
  22. {
  23.  //déclaration + allocation d'un tableau de 2 dimensaions et de i chaines
  24.  for (int i=0;i<this->Input->GetNumberOfPoints();i++ )
  25.  {
  26.    this->Input->GetPointCoordinates(i,X);//Xi
  27.    TablePoints[i][0]=X[0];
  28.    TablePoints[i][1]=X[1];//j'ai mit une copie des mes sommets dans un tableau
  29.    TablePoints[i][2]=X[2];
  30.  }
  31. }
  32. void ComputeLaplacian()
  33.  {
  34.   int m=6;
  35.   double** TableLaplacian = new double* [this->Input->GetNumberOfPoints()] ;
  36.   double Y[3],A[3],L[3];
  37.   vtkIdList *MyList=vtkIdList::New();
  38.   for (int i=0; i<this->Input->GetNumberOfPoints(); i++)
  39.   {
  40.    this->Input->GetVertexNeighbours(i,MyList);//elle me passe les sommets qui ont des voisinages avec le sommet choisi
  41.    TablePoints[i][0]=X[0];
  42.    TablePoints[i][1]=X[1];
  43.    TablePoints[i][2]=X[2];
  44.    double somme[3];
  45.    somme[0]=0; somme[1]=0;somme[2]=0;
  46.   for (int j=0;j<MyList->GetNumberOfIds();j++) //le nbre d'ID correspond au nombre des points de voisinage
  47.   {
  48.                 this->Input->GetPointCoordinates(MyList->GetId(j),Y);//prendre les voisins Y(j) de i
  49.    TablePoints[j][0]=Y[0];
  50.    TablePoints[j][1]=Y[1];
  51.    TablePoints[j][2]=Y[2];
  52.    A[0]=TablePoints[j][0]-TablePoints[i][0];
  53.    A[1]=TablePoints[j][1]-TablePoints[i][1];//on soustraire Y(j) de X(i) pour chaque axe
  54.    A[2]=TablePoints[j][2]-TablePoints[i][2];
  55.    somme[0]=somme[0]+A[0];
  56.    somme[1]=somme[1]+A[1];//pour le calcul de Laplacian Discret= somme (y(j)-X(i))  
  57.    somme[2]=somme[2]+A[2];
  58.    L[0]=1/m*somme[0];
  59.    L[1]=1/m*somme[1];//Laplacian d'ordre 1 L(X)=1/6*somme(Y(j)-X(i))
  60.    L[2]=1/m*somme[2];
  61.   }
  62.   TableLaplacian[i][0]=L[0];
  63.   TableLaplacian[i][1]=L[1];//j'ai mit une copie des mes sommets dans un tableau
  64.   TableLaplacian[i][2]=L[2];
  65.  }
  66.  MyList->Delete();
  67. }
  68.  void AccumulateLaplacian()//X+Lambdadt*Laplacian
  69.  {
  70.   double X[3],Lambdadt=10;
  71.   for (int i=0; i<this->Input->GetNumberOfPoints(); i++)
  72.   {
  73.    X[0]=TablePoints[i][0];
  74.    X[1]=TablePoints[i][1];
  75.    X[2]=TablePoints[i][2];
  76.    this->ComputeLaplacian();
  77.   }
  78.    Accumulate[i][0]=X[0]+Lambdadt*TableLaplacian[i][0];
  79.    Accumulate[i][1]=X[1]+Lambdadt*TableLaplacian[i][1];
  80.    Accumulate[i][2]=X[2]+Lambdadt*TableLaplacian[i][2];
  81.  }
  82.  void ApplyImplicitFilter(double Lambdadt, int n)
  83.  {
  84.   this->AllocateTable();
  85.   for (int n=0;n<4;n++)
  86.   {
  87.    double Lambdadt=0, nombre=10;
  88.    Lambdadt=pow(nombre,n);//lambdadt=10^n;
  89.    this->ComputeLaplacian();
  90.    this->AccumulateLaplacian();
  91.   }
  92.   for (int i=0;i<this->Input->GetNumberOfPoints();i++)
  93.    {
  94.     this->Input->SetPointCoordinates(i, Accumulate[i]);//je fais réagir les nouveaux positions de mes sommets  
  95.    }
  96.  }
  97.  int vtkImplicitFairing::free(double **TablePoints,double **Accumulate,double **TableLaplacian);
  98. protected:
  99. vtkSurface *Input;
  100. };
  101. int main( int argc, char* argv[] )//argc contient le nombre de parametre passé au programme +1  
  102. //argv est un tableau contenant les chaines de caractere transmises
  103. {
  104. int i;
  105. for(i=0;i<argc;i++)
  106. {
  107.  printf("Argument %1i : %s \n", i+1, argv[i]);
  108. }
  109. //Lire le fichier
  110. vtkSurface *Create=vtkSurface::New();
  111. Create->CreateFromFile(argv[1]);
  112. RenderWindow *Window=RenderWindow::New();
  113. Window->SetInput(Create);
  114. //Filtrage
  115. vtkImplicitFairing *Fairing=new (vtkImplicitFairing);
  116. Fairing->SetInput(Create);
  117. Fairing->ApplyImplicitFilter(atof(argv[2]),atoi(argv[3]));
  118. Window->Render();
  119. Window->Interact();
  120. //sauvgarde de maillage
  121. vtkPolyDataWriter *Data=vtkPolyDataWriter::New();
  122. Data->SetInput(Create);
  123. Data->SetFileName("Implicit.vtk" );
  124. Data->Write();
  125. return(0);
  126. }


j'espére que tu vas comprendre ce que je voudrai

Reply

Marsh Posté le 18-01-2007 à 15:23:19    

Reply

Marsh Posté le 18-01-2007 à 15:27:09    

je n'ai pas compris tout à fais ce que tu voudras me dire j'ai un problème avec la compilation et ce problème vient d'une méthode et j'ai mis tout le programme pour que la personne comprend le déroulement du programme voilà. Si tu pourras m'aider en expliquant ou il se trouve le problème je serai ravis merci. :D

Reply

Marsh Posté le 18-01-2007 à 15:33:36    

Quand francesco te dit que "i" n'a pas la bonne portée ca te parle ?


---------------
Töp of the plöp
Reply

Marsh Posté le 18-01-2007 à 15:48:39    

c'est bon je l'ai trouvé c'est exactement ce qu'il m'a dit je n'ai pas fais gaffe mais je toujours un problème dans la premiére argument il arrive pas à lire mon fichier pourquoi??

Reply

Marsh Posté le 18-01-2007 à 15:53:57    

:??:  
 
tu peux parler en français (accords, ponctuation, ...) stp ?  Parce que là, j'ai vraiment du mal à comprendre...


---------------
TriScale innov
Reply

Marsh Posté le 18-01-2007 à 15:59:51    

ok , on Fait j'arrive à l'exécuter mais, j'ai toujours un problème dans l'argument [1], parce que le programme n'arrive pas à le lire pourtant, je l'ai mis en argument (propriétés->debugging->commandArgument)ici je mets mes arguments . mais il ne le lis pas . Pourqoui????
j'espére avoir être clair cette fois.

Reply

Marsh Posté le 18-01-2007 à 16:31:53    

qu'est-ce que les lignes 139-143 t'affichent à l'écran ?
 
Je ne sais pas comment marche ton environnement de développement, mais tu peux aussi tester en mettant tes arguments directement en ligne de commande dans une console:

myprog.exe arg1 arg2


 
(en supposant que tu es sous Windows)


---------------
TriScale innov
Reply

Marsh Posté le 18-01-2007 à 16:31:53   

Reply

Marsh Posté le 18-01-2007 à 16:45:16    

Code :
  1. double** TableLaplacian;
  2. double** TablePoints;
  3. double** Accumulate;
  4. void AllocateTable()
  5. {
  6.    TablePoints = new double* [this->Input->GetNumberOfPoints()];
  7.    Accumulate=new double* [this->Input->GetNumberOfPoints()];       
  8.    TableLaplacian = new double* [this->Input->GetNumberOfPoints()];
  9.    for (int i=0;i<this->Input->GetNumberOfPoints();i++)
  10.    {
  11.       TablePoints[i]=new double[3] ;
  12.       TableLaplacian[i]=new double[3] ;
  13.       Accumulate[i]=new double[3] ;
  14.    }


 
wééééééééééééééé :D
 
bon plus sérieusement: std::vector<>
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed