Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1679 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  un problème dans une équation c++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

un problème dans une équation c++

n°1504614
hamoudasaf​ira1
Posté le 18-01-2007 à 14:39:06  profilanswer
 

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

mood
Publicité
Posté le 18-01-2007 à 14:39:06  profilanswer
 

n°1504624
franceso
Posté le 18-01-2007 à 15:01:28  profilanswer
 

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
n°1504635
hamoudasaf​ira1
Posté le 18-01-2007 à 15:22:19  profilanswer
 

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

n°1504636
_darkalt3_
Proctopathe
Posté le 18-01-2007 à 15:23:19  profilanswer
 
n°1504638
hamoudasaf​ira1
Posté le 18-01-2007 à 15:27:09  profilanswer
 

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

n°1504639
_darkalt3_
Proctopathe
Posté le 18-01-2007 à 15:33:36  profilanswer
 

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


---------------
Töp of the plöp
n°1504647
hamoudasaf​ira1
Posté le 18-01-2007 à 15:48:39  profilanswer
 

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??

n°1504648
franceso
Posté le 18-01-2007 à 15:53:57  profilanswer
 

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


---------------
TriScale innov
n°1504650
hamoudasaf​ira1
Posté le 18-01-2007 à 15:59:51  profilanswer
 

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.

n°1504672
franceso
Posté le 18-01-2007 à 16:31:53  profilanswer
 

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
mood
Publicité
Posté le 18-01-2007 à 16:31:53  profilanswer
 

n°1504682
bjone
Insert booze to continue
Posté le 18-01-2007 à 16:45:16  profilanswer
 

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<>
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  un problème dans une équation c++

 

Sujets relatifs
Problème de @@DateFirst sur 40aine de serveurs[REGLE] Problème d'include
fonction mkdir, choix du dossier destination ?Problème .GBK
Probleme d'association de requete Count et SelectProblème de jointure ? 'where clause'
Probleme compilation sous windows [devc++]Problème avec menu déroulant
[DirectX] problème de skinned meshProblème résolution équation sous Matlab
Plus de sujets relatifs à : un problème dans une équation c++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR