Bonjour à tous,
Voila, je suis entrain d'écrire une classe graphique et je constate un petit problème concernant ma fonction rotation.
le fonctionnement en est simple, je convertis les coordonnés (x, y) d'un point en coordonnés polaires (r, teta). ensuite, j'augmente ou diminu l'angle, et finalement reconverti en coordonnees cartésiennes :
POINT rotation(POINT buf, float z)
{
float teta;
float r = sqrt(buf.x*buf.x + buf.y*buf.y);
if (buf.y>0) {teta = acos(buf.x/r);} //convertion vers coordonnés polaires
if (buf.y<0) {teta = -acos(buf.x/r);}
buf.x=r*cos(teta+z); // convertion vers coordonnees cartésiennes
buf.y=r*sin(teta+z);
return buf;
}
Le problème est que je constate au fur et a meusure de la rotation une diminution de taille. (Par exemple, un triangle (3 points) retréçit en même temps qu'il pivote)
Car j'ai l'impression que tu fais une succession de rotations de faible angle !
C'est pas joli, dans la mesure où d'énormes approximations seront faites à chaque micro degré de rotation.
Je te conseillerais d'enregistrer à la fois coordonnées polaires et cartésiennes dans ton objet, si la mémoire n'est pas un soucis dans ton application (Pense à toshop qui mémorise RVB,HSR, etc à la fois)
; I'm just keeping the hopeless cross to increase the meaninglessness
Alias, le gonfleur de swap ... Il mémorise plein de choses, et je sais que des opérations succéssives dans un "plan transformée" d'image s'effectuent toujours dans le même plan (autrement dit, aucune transformée n'est faite quand tu fais 2 opérations succéssives dans fourrier par exemple)
;I'm just keeping the hopeless cross to increase the meaninglessness
Merci de ta réponse, cela ne change malheureusement rien :s. Y'aurais il une methode pour augmenter la taille de la figure en même temps que son retrécissement afin de la maintenir constante ? (augmenter r peut être ?)
Merci pour ton conseil, j'avais pas pensé à concerver les coordonnés polaires en effet :-)
J'utilise un angle petit afin de rendre la rotation fluide (telle une animation). (z=0.2 radians).
Cela m'interresse Comment s'utilise toshop ???(j'ai crée une classe utilisant la SDL, pourrais-je m'en servir ?)
Merci encore pour ta réponse
a ok, :p. Jme disait aussi :s
Sauf qu'un jeu (ou un auter univers graphique et dynamique, c'est beaucoup plus gourmand).
En faite, je pense sérieusement à preséent de conserver les deux types de coordonnées (polaires et carthésiennes, c'est le même principe dans la 3d je crois)
En général, en 3D, tu stockes tout par ajout de matrices successives.
Ces matrices indiquent un changement de repère par translation ou rotation.
En gros-simplifié, t'as
[debut de scene] [matrice initiale] [dessin du mur] [matrice de rotation] [dessin de la porte] [matrice de rotation] [dessin de la poignée][fin de scene]
Une matrice à elle seule n'est pas une fonction ; mais la multiplication par une matrice, c'est une fonction !
L'idée est de dire que tu as des variables de départ (x,y,z), ça en fait un vecteur que je vais appeler X
Les rotations, et translations peuvent tous s'écrire dans une matrice M:
[ a0 a1 a2 ]
[ b0 b1 b2 ]
[ c0 c1 c2 ]
(les coefs a,b,c dépendent du point de rotation ou du vecteur de translation)
et tu obtiens ton vecteur Y (translaté, ou rotaté ) en fesant