Calcul d'un angle

Calcul d'un angle - C++ - Programmation

Marsh Posté le 26-01-2007 à 18:50:11    

c'est encore moi!!!! j'ai un problème dans mon programme et quand je ferai l'affiche de tout les valeurs de calculs, c'est dans le calcul de l'angle qui plante. Donc je vous mis le bou de code, de calcul de l'angle et je voudrai savoir, est-ce comme ça, qu'il faut le faire ou bien non???
 

Code :
  1. double norme=vtkMath::Norm(Ne);
  2.     Z=vtkMath::Dot(Vi,Ne);//produit entre 2 vecteurs[3] le résultat dans Z cosOe=Ne.Vi
  3.     Tetta=cos(acos(Z)/2.0);//cosOe/2=cos(arccos(Ne.Vi))/2

Reply

Marsh Posté le 26-01-2007 à 18:50:11   

Reply

Marsh Posté le 26-01-2007 à 19:24:35    

1- Z n'est un cosinus que si tes deux vecteurs (Vi et Ne) sont normés. (sinon, rien ne te garantit que tu as un résultat de norme inférieure à 1)

Code :
  1. Z=vtkMath::Dot(Vi,Ne) / (vtkMath::Norm(Vi) * vtkMath::Norm(Ne));


 
2- c'est pas très efficace d'utiliser un acos pour calculer ton cos (theta/2).


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

Marsh Posté le 26-01-2007 à 20:46:27    

c'est je voudrai calculer c'est Oe/2 c'est pour ça j'utilise acos.
c'est bien ce que tu as fais mais sauf que la norme de vi et ne =1.
mais on fait, quand je fasse le calcul de Tetta j'aurai des valeurs indéterminés donc pour cela mon programme ne m'affiche plus rien. J'ai enlever le calcul de cosOe/2 j'ai resté sur cosOe, j'ai toujours le problème, donc ce n'est pas du calcul de l'angle. C'été du façon de faire le tableau .

Code :
  1. for (int e=0; e<this->Input->GetNumberOfEdges(); e++)
  2.    {
  3.     this->Input->GetEdgeVertices(e,ii,jj);//pour obtenir la barêtte Eiijj
  4.     //calcul du norme ||N1+N2||
  5.     Input->GetPointCoordinates(ii,Vi);//je donnes le coordonnées du ii et jj
  6.     Input->GetPointCoordinates(jj,Vj);
  7.     Ne[0]=Vi[0]+Vj[0];
  8.     Ne[1]=Vi[1]+Vj[1];
  9.     Ne[2]=Vi[2]+Vj[2];//additionner les 2 vecteurs Vi et Vj
  10.     double norme=vtkMath::Norm(Ne);
  11.     double Z=vtkMath::Dot(Vi,Ne)/(vtkMath::Norm(Vi)*vtkMath::Norm(Ne));//produit entre 2 vecteurs[3] le résultat dans Z cosOe=Ne.Vi
  12.     //double Angle=acos(Z);
  13.     //double Tetta=cos(Angle);//cosOe/2=cos(arccos(Ne.Vi))/2
  14.     double Edge=this->Input->GetDistanceBetweenVertices(ii,jj);
  15.     He=2*Edge*Z;
  16.     double LambdaSquare=pow(Lambda,2);
  17.     double Valeur=(Lambda-absolu);
  18.     double ValeurSquare=pow(Valeur,2);
  19.     if (absolu>Lambda)
  20.      W=LambdaSquare/(r*ValeurSquare+LambdaSquare);
  21.     else
  22.      W=1;
  23.     TableDeltaLambda[ii][0]-=W*He*Ne[0];
  24.     TableDeltaLambda[ii][1]-=W*He*Ne[1];
  25.     TableDeltaLambda[ii][2]-=W*He*Ne[2];
  26.     TableDeltaLambda[jj][0]-=W*He*Ne[0];
  27.     TableDeltaLambda[jj][1]-=W*He*Ne[1];
  28.     TableDeltaLambda[jj][2]-=W*He*Ne[2];
  29.     //cout<<"TableDeltaLambda[ii]"<<TableDeltaLambda[ii][0]<<TableDeltaLambda[ii][1]<<TableDeltaLambda[ii][2]<<endl;
  30.     //cout<<"TableDeltaLambda[jj][0]"<<"    "<<TableDeltaLambda[jj][0]<<"    "<<"[1]"<<"    "<<TableDeltaLambda[jj][1]<<"    "<<"[2]"<<"    "<<TableDeltaLambda[jj][2]<<endl;  
  31.    }

 
je vous ai mis cette boucle et c'est dans les 2 tableaux que je trouve le problème. Quand je les affiches, j'aurai les mêmes valeurs dans les 6 cas pourqoui????????

Reply

Sujets relatifs:

Leave a Replay

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