Rotation d'une image par rapport a l'origine

Résolu
cs_hasen Messages postés 246 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 29 décembre 2008 - 14 juin 2007 à 19:06
cs_hasen Messages postés 246 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 29 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é!

Merci d'avance!

Hasen

4 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
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
3
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
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.

Bon courage

Oniria
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
14 juin 2007 à 22:29
Bonsoir à tous,

@ Hasen, voici un lien qui pourra certainement t'aider.

http://homepages.borland.com/efg2lab/ImageProcessing/RotateScanline.htm

Tu choisis le lien "RotateScanline.ZIP" à l'avant dernier paragraphe.

@+,

Cincap

[url]mailto:/url
0
cs_hasen Messages postés 246 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 29 décembre 2008 2
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!

A bientot

Hasen
0
Rejoignez-nous