Accueil > Forum > > > > rotation 2d (coordonnés polaires)
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]
|
|
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(
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|