begin process at 2012 05 30 15:56:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

rotation 2d (coordonnés polaires)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

rotation 2d (coordonnés polaires)

vendredi 24 juillet 2009 à 09:22:01 | rotation 2d (coordonnés polaires)

baby3378

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)

Auriez vous un moyen pour pallier ce phénomène ?

vendredi 24 juillet 2009 à 15:35:25 | Re : rotation 2d (coordonnés polaires)

juju12

Réponse acceptée !

Probablement un problème de précision. Utilise des double au lieu des float, et dis-nous si ça s'améliore.

vendredi 24 juillet 2009 à 16:30:36 | Re : rotation 2d (coordonnés polaires)

baby3378

J'y avais pensé mais ce changement n'y a rien changé :s. Y'aurait il un auter moyen ??

vendredi 24 juillet 2009 à 17:20:41 | Re : rotation 2d (coordonnés polaires)

juju12

Oui, cela peut s'écrire directement :
x'=x*cos(z)-y*sin(z)
y'=x*sin(z)+y*cos(z)

lundi 27 juillet 2009 à 09:33:24 | Re : rotation 2d (coordonnés polaires)

baby3378

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 ?)

lundi 27 juillet 2009 à 14:28:07 | Re : rotation 2d (coordonnés polaires)

Kotomine

Réponse acceptée !

Ton z il vaut combien en moyenne ?

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

lundi 27 juillet 2009 à 14:50:35 | Re : rotation 2d (coordonnés polaires)

baby3378

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

lundi 27 juillet 2009 à 15:42:41 | Re : rotation 2d (coordonnés polaires)

Kotomine

Réponse acceptée !


toshop = photoshop :D

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

lundi 27 juillet 2009 à 15:57:26 | Re : rotation 2d (coordonnés polaires)

baby3378

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)

lundi 27 juillet 2009 à 16:07:38 | Re : rotation 2d (coordonnés polaires)

Kotomine

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]


1 2

Cette discussion est classée dans : rotation, buf, coordonnés, teta, polaires


Répondre à ce message

Sujets en rapport avec ce message

rotation d'une image [ par David ] Problème de rafraichissement (?) [ par Slaayer ] G programmé une application Win32 en C, sous visual C++, permettant de chatter en se connectant à un serveur.Le client intercepte bien les msg envoyé rotation [ par colonelfr ] Comment faire une rotation sur plusieurs GL_TRIANGLES pour qu'ils bougent tous a partir d'un seul point?En effet, j'arrive a faire bouger les triangle rotation d'une image PGM ou RAW [ par zorillamarc ] je cherche à coder une fonction me permettant de faire tourner une image PGM ou RAW d'un angle souhaité. par avance merci,Marc Zorilla directX [ par pip ] Bonjour,Lorsque j'effectue une rotation d'un rectangle avec directX (en C++) j'obtient la chose suivante:Une RS232c ss vc++ [ par kalf2000 ] salut,alor voila je suis en projet pour mon bts et je dois utiliser un scanner relier par une liaison rs232c, je dois donc recuperer le numero du code Rotation d'une image [ par xleureaud ] J'aimerai faire tourner une image par rapport a son centre avec C++Builder PROBLEME CLIENT SERVER [ par zzzzzz ] Mon client marche c sur et il envoie bien abcd mais monserver marche po je suis debutant en server socket... :(je sais pas comment faire en sorte que Prob strcmp(); [ par zzzzzz ] c pour mon server en socket. Jaimerai que quand ya un message envoyer part le client si ce message c abcd ca ecrive Commande abcd Recu ! or je suis pe UNIX: Probleme de pipe (2): le source ne passe pas entierement [ par CoreBreaker ] int fds[2];... int f= open("arch.cpio", O_RDONLY); pid_t p; pipe(fds); p= fork(); if( p > 0 ) { char buf[1024]; int n; while( (n= read(


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,090 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales