Rotation d'une image par rapport a l'origine

Résolu
Signaler
Messages postés
246
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
29 décembre 2008
-
Messages postés
246
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
29 décembre 2008
-
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

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
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
Messages postés
292
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
18 décembre 2014
3
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
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
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
Messages postés
246
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
29 décembre 2008
2
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