begin process at 2012 05 28 07:32:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

angles


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

angles

lundi 1 mars 2004 à 16:07:42 | angles

PijanaKrava

Membre Club
Yop tt le monde

voilà g un chti problème avec une appli VC++ ke je dois faire.
Voilà g 3 points dont g les coordonnées et je dois calculer l'angle formé par les segments formés par ces 3 points.
J'utilise cette fonction à ki je passe un tableau contenant les coord sous la forme x1,y1,x2,y2,x3,y3 et ds la f° j'essaye de faire les calculs grace au prod scalaire mais les résultats sont pas hyper probants

int calculAngle(int *coord)
{
int angle, X1, X2, Y1, Y2;
double dist21, dist23, prodScal, cos, phi;

X1 = *(coord) - *(coord + 2);
Y1 = *(coord + 1) - *(coord + 3);
X2 = *(coord + 4) - *(coord + 2);//
Y2 = *(coord + 5) - *(coord + 3);//
//calcul du produit scalaire
prodScal = (double) ((X1 * X2) + (Y1 * Y2));
dist21 = hypot((double) X1, (double) Y1);
dist23 = hypot((double) X2, (double) Y2);
cos = prodScal / (dist21 * dist23);
phi = acos(cos);
angle = (int) floor(phi);
return angle;
}

si quelqu'un a une idée lumineuse je suis preneur
merci d'avance
lundi 1 mars 2004 à 18:31:40 | Re : angles

Chouchou182


Salut

Il y a apparemment quelques problèmes dans le programme :

Travailles-tu avec des int ou avec des double?

La fonction acos te renvoie-t-elle le résultat voulu ?

float Angle(Xa, Ya, Xb, Yb, Xc, Yc)
{
// renvoie l'angle entre les vecteurs BA et BC
float rtn, cos, sin, Xba, Yba, Xbc, Ybc ;
// Ce sont en réalité l'inverse des normes :
float NormeBA, NormeBC ;

Xba = Xb - Xa ; Yba = Yb - Ya ;
Xbc = Xb - Xc ; Ybc = Yb - Yc ;

if ( (Xba == 0.0f && Yba == 0.0f)
|| (Xbc == 0.0f && Ybc == 0.0f) )
{
printf("Erreur...\nVecteur null...\a\n") ;
return 0 ;
}

NormeBA = Xba * Xba + Yba * Yba ; NormeBA = powf(NormeBA, -.5f) ;
NormeBC = Xbc * Xbc + Ybc * Ybc ; NormeBC = powf(NormeBC, -.5f) ;

// Le cosinus de l'angle est le produit scalaire divisé par le produit des normes.
cos = ( ( Xba * Xbc ) + ( Yba * Ybc ) ) * NormeBA * NormeBC ;

// Le sinus de l'angle est le déterminant divisé par le produit des normes.
sin = ( ( Xba * Ybc ) - ( Yba * Xbc ) ) * NormeBA * NormeBC ;

if ( sin >= 0 ) return acosf(cos) ;
else return -acosf(cos) ;

return rtn ;
}


Voila je n'ai pas testé mais je pense que c'est correct.

A++

Chouchou
lundi 1 mars 2004 à 18:33:23 | Re : angles

Chouchou182


OUps

Désolé mais la variable rtn ne sert strictement à rien donc elle est à enlever.

Courage

Chouchou
lundi 1 mars 2004 à 19:00:29 | Re : angles

Chouchou182


Encore bétise de ma part

Je crois qu'il vaut mieux retourner PI - acosf(cos) ;

Maiss il vaut mieux étudier en détail le fonctionnement de cette fonction parce que j'ai encore des doutes

Désolé pour mes erreur et bonne prog

Chouchou
mardi 2 mars 2004 à 14:06:31 | Re : angles

PijanaKrava

Membre Club
merci pour ta tantative chouchou mais ça morche tjs po :'(
le monde est trop injuste !!
vendredi 5 mars 2004 à 18:38:28 | Re : angles

Chouchou182


#include <iostream>
#include <cstdio>
#include <cmath>

#define PI 3.1415926535f

float Angle(float Xa, float Ya, float Xb, float Yb, float Xc, float Yc)
{
// renvoie l'angle entre les vecteurs BA et BC
float cos, sin, Xba, Yba, Xbc, Ybc ;
// Ce sont en réalité l'inverse des normes :
float NormeBA, NormeBC ;

Xba = Xb - Xa ; Yba = Yb - Ya ;
Xbc = Xb - Xc ; Ybc = Yb - Yc ;

if ( (Xba == 0.0f && Yba == 0.0f)
|| (Xbc == 0.0f && Ybc == 0.0f) )
{
printf("Erreur...\nVecteur null...\a\n") ;
return 0 ;
}

NormeBA = Xba * Xba + Yba * Yba ; NormeBA = pow(NormeBA, -.5f) ;
NormeBC = Xbc * Xbc + Ybc * Ybc ; NormeBC = pow(NormeBC, -.5f) ;

// Le cosinus de l'angle est le produit scalaire divisé par le produit des normes.
cos = ( ( Xba * Xbc ) + ( Yba * Ybc ) ) * NormeBA * NormeBC ;

// Le sinus de l'angle est le déterminant divisé par le produit des normes.
sin = ( ( Xba * Ybc ) - ( Yba * Xbc ) ) * NormeBA * NormeBC ;

printf("cos %s ; sin %s\n", cos < 0.0f ? "negatif":"positif", sin < 0.0f ? "negatif":"positif") ;

if ( sin >= 0 ) return acos(cos) ;
else return -acos(cos) ;
}

int main() {
float * Coordonnees = new float[6] ;
cout << "Entrez les coordonn\202es des trois points :\n\tXa ? " ;
cin >> Coordonnees[0] ;
cout << "\n\tYa ? " ;
cin >> Coordonnees[1] ;
cout << "\n\tXb ? " ;
cin >> Coordonnees[2] ;
cout << "\n\tYb ? " ;
cin >> Coordonnees[3] ;
cout << "\n\tXc ? " ;
cin >> Coordonnees[4] ;
cout << "\n\tYc ? " ;
cin >> Coordonnees[5] ;
cout << "\n" ;
float angle= Angle(Coordonnees[0],Coordonnees[1],Coordonnees[2],Coordonnees[3],Coordonnees[4],Coordonnees[5]) ;
cout << "L\'angle form\202 par les trois points A, B, C est de " << angle << " radians\n"
<< "\tsoit " << angle / PI * 180 << " degr\202s.\n" ;

delete[] Coordonnees ;
return 0 ;
}




Je ne vois pas ou est le problème

J'ai fait quelques tests et les résultats me semblainet corrects.

A++

Chouchou
vendredi 5 mars 2004 à 18:55:52 | Re : angles

PijanaKrava

Membre Club
c bon c bon ça marche
merci pour ton aide


Cette discussion est classée dans : x1, double, coord, y1, x2


Répondre à ce message

Sujets en rapport avec ce message

aide a la programmation résolution système linéaire [ par hadjer02 ] hadjersalem,j'ai le système AX=B avec pour 4 points   : turbo c++ [ par habhoubnatour ] salut je suis libanaise et j' ai un projet a faire un programme sur turbo c++ qui fait le meme travaille que le paint le programme sur windows pour de vecteurs entre 2 points en C [ par lutinblue ] Je voudrais avoir 2 points et leur appliquer puis tracer le vecteur (1/25)*((-x+2*y(1-x), -y+x(1-y));Pour le moment j'ai quadriller ma zone graphique équivalence Pascal ==> C [ par EMSIEN ] Bonjour je cherche l?équivalence en C d?une fonction que je connais en PASCAL La voici window(x1, y1, x2, y2) Avec x1,x2,y1,y2 les coordonnées de ce erreur incomprénensible [ par fafa21081974 ] Bonjour j'ai une erreur de compil que je ne comprends pas et même en trifouillant dans le net : impossible de saisir la raison des erreurs ; alors je Lagrange Polynomial [ par bayans ] Je souhaite ajouter ces formules dans le code ci-dessus, afin d'executer le cacul de Lagrange Polynomial Interpolation dans le langage c Au fait si le Modelisation d'une fonction à plusieurs variables [ par Ceubex ] Bonjour, J'ai un objet avec des propriété : X1= X2= ... Xn= Reussite= J'ai une liste avec plein d'objets dont les propriété ont des valeurs definies error LNK2001: unresolved external symbol _WinMainCRTStartup [ par CrKa ] slt,j'ai cette erreur dans mon programme en VC++ erreur 1>------ Rebuild All started: Project: test4, Configuration: Debug Win32 ------ 1>LINK : erro code 1 [ par mimou121084 ] bonjour tous le monde, j'ai un code en fortran et je vais le traduire en c++ le probleme et que les boucle en passant de fortran au C++ se differe svp


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,544 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales