IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Rotation autour d'un cercle?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut Rotation autour d'un cercle?
    Bonjour,

    Je suis exposé face à un petit problème de matheux apparemment

    Imaginez déplacer un triangle autour d'un cercle (ça c'est bon) mais la base de ce triangle doit toujours etre en direction du centre de ce cercle (la ça bloque)

    Pour déplacer le triangle j'ai utilisez le bête calcul pour récupérer un point par rapport à un angle ( de mémoire r * cos(angle) et r * sin(angle) )

    Pour la rotation j'ai essayer de mettre le point de rotation au centre du triangle et de faire une rotation par rapport à l'angle mais ça ne fonctionne pas vraiment (il fait plusieurs rotations au lieu de faire une rotation par tour du cercle)...

    En écrivant ce message, j'ai l'impression qu'il me manque une valeur pour calculer réellement la rotation... je vais continuer à chercher (mais si je trouve je devrais attendre ce soir pour tester ) mais si quelqu'un a la solution je suis preneur...

    Edit: arf... suis pas sur le forum algo? :p (désolé)
    ****** Analyse/Développeur .Net

  2. #2
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut, à priori je ferais comme ça : je choisirais comme origine du triangle le milieu de sa base et je le ferais tourner du même angle que la rotation autour du cercle. Par ex. si au départ pour l'angle 0 tu places le triangle à droite du cercle avec un angle -90 (pour que la base soit vers le centre), pour un angle quelconque tu tourne le triangle à -90 + angle.

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonjour,

    ça m'a l'air d'être un problème d'enchainement des transformations. Etant dans le forum Jeux, on va utiliser les matrices de transformations classiques (http://jeux.developpez.com/faq/matqu...ransformations).

    Pour faire tourner un triangle autour d'un cercle, et que son orientation change aussi, il faut combiner une translation et une rotation. En plaçant le cercle et le triangle au centre de ton repère, il faut déplacer ton triangle (transation) puis lui appliquer une rotation qui fera tourner tous les points du triangle autour du centre du repère.
    Tout dépend de ton exercice, mais ça serait une erreur de vouloir calculer les coordonnées à la main, sans passer par les matrices de transformation.

  4. #4
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    non non N_C_I_S ça ne fonctionnera pas ça... suis quasi sur à 99% que le point de rotation doit être au centre du triangle... ^^

    merci pour la piste khayyam... je vais regarder de ce coté...

    Le but de mon exercice c'est bien entendu de créer un petit jeu (j'ai déjà de l'xp derrière moi mais pour du basique... genre space invaders quoi)...

    bon je vais aller sur msdn pour en savoir plus sur les matrix de xna ^^
    ****** Analyse/Développeur .Net

  5. #5
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    il faut effectivement utiliser une matrice de rotation

    ou si ta rotation est sur un plan simple (X , Y ou Z ...)
    alors c'est un problème en 2D et la solution c'est ce que t'as dit:
    centre du cercle = centre de rotation = (0,0)
    un point (x,y) tourné d'un angle alpha aura comme coordonnées (complexes):
    (x * cos (alpha) - y * sin(alpha), x * sin(alpha) + y * cos(alpha) )

    bien sur tu vois le lien entre les complexes et les matrices 2x2 ...

  6. #6
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par acx01b Voir le message
    ou si ta rotation est sur un plan simple (X , Y ou Z ...)
    alors c'est un problème en 2D
    Qu'est-ce qu'un plan simple, qu'est-ce qui le différencie d'un plan compliqué?

    Voilà l'idée que je me fait d'un repère :

    Lorsqu'on utilise la notion de repère (1,2,3,..., x dimensions), on doit définir un ou plusieurs vecteurs permettant de représenter TOUT les points de ce repère, a ce stade peut importe que le repère soit orthonormé ou non. On peut alors définir des axes à partir de ces vecteurs (x, y, z en général) et de la position du repère. Mais ces axes ne sont là que pour nous aider à se représenter le repère, il n'ont pas de signification particulière (à ma connaissance).

    Maintenant si il travail dans un espace à 2dimensions, alors les matrices de rotations peuvent aussi bien être appliqué quelles le sont sur un espace à trois dimensions. La seule justification que je trouve pour l'instant à un "plan simple" serait : travailler dans un espace 3D, faire une projection en 2dimensions par suppression d'une dimension (Z), utiliser la rotation sur le triangle projeté...

    Bon j'avoue que je ne vois pas l'intérêt mais peut-être que...

    Citation Envoyé par acx01b Voir le message
    (x * cos (alpha) - y * sin(alpha), x * sin(alpha) + y * cos(alpha) )
    J'ai jamais trop aimé les complexes mais en effet c'est le résultat de la multiplication de la matrice de rotation :
    [ cos(A) ] [ -sin(A) ]
    [ sin (A) ] [ cos(A) ]

    par le vecteur(x,y). Donc celle à utiliser si l'on souhaite effectuer une rotation (avec les matrices ) à un vecteur.

    Citation Envoyé par khayyam90 Voir le message
    Pour faire tourner un triangle autour d'un cercle, et que son orientation change aussi, il faut combiner une translation et une rotation. En plaçant le cercle et le triangle au centre de ton repère, il faut déplacer ton triangle (transation) puis lui appliquer une rotation qui fera tourner tous les points du triangle autour du centre du repère
    J'ai pour habitude de toujours travailler en repère locale (enfin après ça dépend ce que l'on doit faire), dans ce cas c'est l'inverse, rotation first... pas que ce soit nécessaire mais c'est toujours bon à préciser (les erreurs arrivent facilement à ce moments là )...

    Pour résumé, et DANS LE CAS où ta scène est en 2D composée de deux éléments (un cercle un triangle) : Utilises un repère à 2 dimensions positionné au centre de ton cercle, utilises TROIS coordonnées (x,y,w?) pour tes vecteurs (ou points). w est la coordonnée homogène, par défaut laisse la à 1! Maintenant tu peux dessiner ton cercle (ne tient pas compte de w il devrait être à 1), ensuite multiplie les coordonnées de ton triangles par la matrice 3*3 (translation) :
    [ 1 ] [ 0 ] [ translate_X ]
    [ 0 ] [ 1 ] [ translate_Y ]
    [ 0 ] [ 0 ] [ .............1 ]

    puis par la matrice de rotation :
    [ cos(A) ] [ -sin(A) ] [ 0 ]
    [ sin(A) ] [ cos(A) ] [ 0 ]
    [ ......0 ] [ .......0 ] [ 1 ]

    Reste plus qu'à "standardizer" les coordonnées : x = x/w et y = y/w pour obtenir les coordonnées dans ton repères.

    Cela dit je ne sait pas si c'est la meilleure solution (d'ailleurs dans ton cas je ne pense pas) mais si je n'ai pas dit de bêtises () c'est le meilleur moyen pour s'en tirer seulement avec des matrices... et puis tu peux facilement mettre en place par la suite un système de hiérarchie qui te permettrait également de faire tourner un carré autour de ton triangle qui tourne autour de ton cercle... donc les matrices c'est bien
    - hp pavillon dv7
    - intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz 2.27GHz
    - nVidia GeForce 9600M GT
    - mémoire vive : 3.0Go

  7. #7
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    Bon merci pour toutes ces précisions mais le problème était autre en fin, il y avais une méthode avec le framework XNA qui me permettais de calculer l'angle de rotation... (je pense que tout ce que vous avez expliquez doit ce trouver derrière cette méthode ^^)

    En fait la méthode c'était juste d'utiliser MathHelper.ToRadians(angle) pour calculer la rotation du triangle ^^

    Comme quoi c'était pas si complexe que ça :p lol
    ****** Analyse/Développeur .Net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tracer du texte autour d'un cercle
    Par olibara dans le forum C#
    Réponses: 3
    Dernier message: 01/11/2009, 10h37
  2. rotation autour d'un axe
    Par aseau dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/04/2009, 16h04
  3. rotation autour d'un objet scene OpenGL
    Par hysah dans le forum OpenGL
    Réponses: 1
    Dernier message: 01/05/2006, 17h31
  4. Rotation autour d'un point
    Par Webhellfire dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/01/2006, 18h21
  5. [debutant] Rotation autour d'un cube
    Par DiGiTAL_MiDWAY dans le forum OpenGL
    Réponses: 8
    Dernier message: 20/06/2005, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo