cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 2008
-
14 juin 2007 à 19:06
cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 2008
-
21 juin 2007 à 16:07
Bonjour a tous!
Pour un projet, je suis en train de coder une fonction permettant la rotation d'une image (tres basique, définie par quelques point seulement, genre un carré) par rapport a l'origine.
Pour cela, j'utilise la formule suivante :
tab[I].X := round(tab[I].X * Cos(radian) + tab[I].Y * Sin(radian));
tab[I].Y := round(-tab[I].X * Sin(radian) + tab[I].Y * Cos(radian));
"radian" est la valeur de mon angle prealablement transformer en radian.
Cette formule devrait marcher, car je l'ai tester sur papier et pas de probleme.
Mais ca ne marche que pour le cas ou mon amgle est egal a 180°, sinon ca transforme completement l'image.
Pire encore, avec un angle de 90° (ou de 270°), tous les points de mon image se retrouvent alignés!!!!
Quelqu'un aurait-il une idée d'ou le problème peut venir???? Je suis déséspéré!
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 17 juin 2007 à 17:46
Bonjour
Sans rentrer dans le détail de ta formule, on peut juste remarquer quelquechose :
tab[I].X := round(tab[I].X * Cos(radian) + tab[I].Y * Sin(radian));
tab[I].Y := round(-tab[I].X * Sin(radian) + tab[I].Y * Cos(radian));
Ton tab[I].X originel a été écrasé par la première formule pour devenirtab[I].X
Peut être que cela serait plus correct ainsi :
tabI_X := tab[I].x;
tab[I].X := round( tabI_X * Cos(radian) + tab[I].Y * Sin(radian));
tab[I].Y := round(-tabI_X * Sin(radian) + tab[I].Y * Cos(radian));
P.S. La formule de rotation 2D ne serait pas :
x'= x*cos(theta)- y*sin(theta)
y'= x*sin(theta)+ y*cos(theta)
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Oniria
Messages postés292Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention18 décembre 20143 14 juin 2007 à 20:16
Bonjour,
Ta formule me semble bizzar, voire étrange :
Dans une fonction de rotation en 2D, il y a deux paramétres le rayon et l'angle plus le centre de la rotation.
Toi, tu n'utilise que l'angle. Là est le probléme.
Revoit tes cours de math, tu trouveras facilement.
cs_hasen
Messages postés246Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention29 décembre 20082 21 juin 2007 à 16:07
Bonjour a tous!!!
Tout d'abord, un grand merci a tous pour avoir pris le temps de me filer un petit coup de main.
Mais celui qui remporte la palme de la meilleure aide est quand meme WhiteHippo qui a su reconnaitre les 2 erreurs que j'ai faite : la formule (x'= x*cos(theta)- y*sin(theta) et y'= x*sin(theta)+ y*cos(theta) ), et surtout le changement de valeur dans mon tableau, il fallait effectivement que j'en fasse une copie pour que les valeurs restes bien les memes pour les 2 lignes de calculs. Maintenant, ca marche du feu de Dieu!!!!
Donc grand merci a toi, mais egalement aux autres!