Maudite arctangente :)

Signaler
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006
-
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006
-
Salut à tous :)



J'ai quelques soucis d'utilisation de la fonction Arctangente.


Lorsque j'utilise cette fonction (atan ou atan2), j'obtiens toujours
des chiffres complètement incohérents au lieu d'avoir les angles que je
recherche.



L'utiisation de cette fonction est faite dans une
double boucle for (x et y) et j'utilise ces valeurs x et y dans
l'arctangente, (ex : atan2((x-210),y) )



Les résultats
obtenus sont assez space (genre 10024579) et, lorsqu'un indice x ou y
change, le nouveau résultat est radicalement différent du premier
(inférieur à zéro dans certains cas) alors qu'il devrait n'être que
légèrement différent.



Quelqu'un sait-il s'il y a des spécificités d'utilisation de cette fonction ?

16 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Les resultat renvoyer sont en radian. Il faut covertir comme ceci:
valeur*(180/PI)
PI egal 3,141592...

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006

je convertis aussi après en degré les résultats mais j'obtiens toujours
des résultats incohérents quelque soit la valeur obtenue en deg ou en
rad :(
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
atan ça me surprend beaucoup mais atan2 j'ai jamais entendue parler de cette fonction alors pour elle je sais pas.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006

en fait j'ai utilisé les 2 fonctions pour essayer mais j'obtenais les mêmes résultats.



atan(x,y) = atan ( x/y );
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
C'est bizzard. J'ai essayer avecc atan de faire des opération comme atan(2458/52) etc. resultat*180/PI et ça me donnais toujours des nombres résonable. Tu peux me donner un exemple de ce que tu calcule comme nombre avec atan?

_____________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006

arf, le prob est que le PC sur lequel je suis pour le moment est sous
Linux (debian) et n'est pas foutu de reconnaître mon stick USB :((

Je mettrai le bout de code que lorsque je rentrerai chez moi (pas avant Lundi)



sinon de tête c'est un truc qui ressemble à ça



#include math.h

#define pi 3.14167





void main(void){



for (x = 1; x <= 210; x++){

for(y = 1; y <= 300; y++){



tab[x][y][0] = (atan((x - 105) / y)) * (180/pi);

tab[x][y][1] = 180 +
(atan((105 - x) / (300 - y) - atan(x / (300 - y))) * (180 / pi);



}

}



}





Là les calculs sont pas texto les mêmes mais l'idée est là. :)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Mais il faut envoyer des radians en argument, pas des degrés !
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006

avec l'arctangente on obtient un angle (ici en radian) les paramètres sont des distances.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oups pardon :)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ah je sais :) Essai ca, ca marchera mieux (Faut se plaindre du compilo C)





tab[x][y][0] = (atan((x - 105.0) / y)) * (180.0/pi);

tab[x][y][1] = 180.0 +
(atan((105.0 - x) / (300.0 - y) - atan(x / (300.0 - y))) * (180.0 / pi);
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Et j'oublie encore un truc, faut que x et y soit des double dans des atan.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
T'es sûr que ça va changer quelque chose? D'habitude, les compilateurs convertisse seul la variable.

_______________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bien sur que ca va changer, car les division dans le atan sont faites en entier. Aucune raison de convertir en double.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Non je veux dire, est-ce que tu crois que ça va régler le problème? Aussi je remarque qu'il y a une ( de trop avant les atan
tab[x][y][0] = ( atan((x - 105.0) / y)) * (180.0/pi);
tab[x][y][1] = 180.0 + (atan((105.0 - x) / (300.0 - y) - atan(x / (300.0 - y))) * (180.0 / pi);

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bien sur que ca va régler le pb. La fonctio atan, n'est pas buggé et est définie sur R.
Messages postés
8
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 mai 2006

j'ai réussi plus ou moins à résoudre mon problème.

Par contre, pour avoir des valeurs cohérentes je dois déclarer tab
comme un tableau d'int et non de double, le problème est qe je perds du
coup en précision (ce qui n'est pas dramatique pour l'utilisation que
je fais du tableau)