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

Algorithmes et structures de données Discussion :

Rotation de matrice (tableaux)


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut Rotation de matrice (tableaux)
    Bonjour,

    Je cherche à faire une rotation d'un tableau à plusieurs dimensions (matrice) en fonction d'un angle.
    Je n'arrive pas à trouver la formule mathématique.

    Voici ce que je cherche à faire :
    |1,2,3|
    |4,5,6|
    représenté par à tableau à 2 dimensions :
    tab[0][0] = 1
    tab[0][1] = 2
    tab[0][2] = 3
    tab[1][0] = 4
    tab[1][1] = 5
    tab[1][2] = 6

    Je cherche par exemple à avoir une rotation à +90 degrès :
    |4,1|
    |5,2|
    |6,3|
    donc
    tab[0][0] = 4
    tab[0][1] = 1
    tab[1][0] = 5
    tab[1][1] = 2
    tab[2][0] = 6
    tab[2][1] = 3


    Comme vous pouvez le voir, les dimensions du tableau changent...(matrice non carrée)
    De plus comment faire pour les autres angles (45°, ...).
    Merci pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    il y a quelque chose qui n'est pas clair...
    Il existe bien des matrices de rotation mais cela n'a absolument rien à voir avec ce que tu souhaites faire. Es-tu sûre d'avoir bien compris ta problématique? Dans quel cadre souhaites-tu faire tes "rotations".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    Si mon tableau représente chaque pixel d'une image, je cherche à faire une rotation de mon image...

  4. #4
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    franchement, je ne vois pas ce que tu veux faire, mais en ce qui concerne les rotations de figures, il suffit de passer par des matrices de rotation. Tout est expliqué ici :
    http://fr.wikipedia.org/wiki/Matrice_de_rotation
    Si tu as des questions n'hésite pas.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    Dans le wiki, il est dit :
    La matrice 4×3 n'est pas carrée et ne peut donc pas être une matrice de rotation
    Or je cherche à faire des rotations de toutes matrices (carrée ou non).

    C'est simple, une image est un ensemble de pixel.
    Une image contient une largeur et une hauteur (en nombre de pixels).
    Je définis donc un tableau à 2 dimensions (une pour les lignes et l'autre pour les colonnes). Et chaque case de ce tableau, contient la valeur du pixel en RGB (simplifié par un entier dans mon exemple).

    Lorsqu'on fait une rotation à +90° d'une image, on déplace les pixels pour modifier l'image. Par exemple le pixel en haut à gauche se retrouve en haut à droite et celui en haut à droite se retrouve en bas à droite, ....

    Moi je cherche la formule mathématique/algo qui permet de faire une rotation de ce tableau à 2 dimensions quelque soit l'angle de rotation !

  6. #6
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    je ne vois pas la contradiction. Une matrice de rotation est nécessairement carrée mais tu peux l'appliquer à une matrice rectangulaire sous réserve que le nombre de lignes de cette dernière soit égal à la taille de la matrice de rotation bien sûr.

    Je reviens un peu sur ton histoire de pixels. Je ne m'y connais pas spécialement mais j'aurais tendance à dire que tes pixels représentent finalement des coordonnées. Ce qui pose problème dans ton exemple de rotation à 90 degrés, c'est que les valeurs de tes pixels sont les mêmes avant et après rotation. En gros, tu as fait "tourner" ton tableau un peu à la manière de ce que l'on fait pour transposer une matrice. Or, ce qui est très bizarre, c'est que tu demandes une formule pour tous les angles : mais une formule pour calculer quoi vu que rien ne change???

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Aure7780 Voir le message
    Moi je cherche la formule mathématique/algo qui permet de faire une rotation de ce tableau à 2 dimensions quelque soit l'angle de rotation !
    Je crois (si j'ai bien compris) que tu mélanges 2 choses :

    • une image est stockée comme une matrice rectangulaire

    • tu veux faire la rotation d'une image


    La formule générale est, pour tout pixel

    x' = x cos(a) + y sin(a)
    y' = x sin(a) - y cos(a)


    Maintenant, suivant l'angle, cela va te donner un ensemble de points englobés par un rectangle... Dont on peut calculer les dimensions en appliquant cet algo aux 4 coins.

    Mais on ne transformera pas un rectangle (image initiale) en un autre (image finale) parfaitement rempli... (sauf si la rotation est modulo 90 degrés)

    Le rectangle final, dans le cas général, aura du noir... Dans des "coins" plus ou moins grands suivant l'angle. Donc on obtiendra plutôt une sorte de losange, inclus dans un rectangle noir.

    Enfin, en général, pour éviter les effets de moiré, on fait en sens inverse : on part du pixel destination et on cherche le pixel d'origine..

Discussions similaires

  1. [Débutant] Somme de matrices/tableaux de cellules
    Par martineaston dans le forum MATLAB
    Réponses: 6
    Dernier message: 20/06/2013, 22h21
  2. Réponses: 4
    Dernier message: 13/02/2011, 11h11
  3. Rotations et matrices
    Par Jimalexp dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 20/01/2009, 20h27
  4. initialisation et rotation de matrice 2D
    Par winzzz dans le forum Boost
    Réponses: 6
    Dernier message: 25/11/2008, 12h10
  5. Matrices - Tableaux à 2 dimensions
    Par melotron dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 09/07/2006, 13h17

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