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

Prolog Discussion :

Rotation d'une matrice


Sujet :

Prolog

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Rotation d'une matrice
    Bonjour,
    Je ne sais pas si j'ai donné le bon nom au sujet.
    Bon bref ...
    Je suis entrain d'écrire un prédicat qui fais la rotation d'une matrice ..
    Je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ? rotation([[0,0,1],[0,0,1],[0,0,1]],X).
     
    X = [[1,1,1],[0,0,0],[0,0,0]];
    X = [[1,0,0],[1,0,0],[1,0,0]];
    X = [[0,0,0],[0,0,0],[1,1,1]];
     
    NO.
    Ce prédicat renvoi tous les cas possibles si on tourne la matrice à droite, à gauche ...
    En gros, comme si on a une vision 3D de la matrice.
    J'ai fais ça, mais ce prédicat renvoi des doublant aussi ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    rotation(L,M):-
       symetrie(L,M);
       symetrie(L,N),
       symetrie(N,M).
     
    symetrie(L,M):-
       symetrie_v(L,M);
       symetrie_h(L,M);
       transposer(L,M).%je l'ai déjà défini
     
    symetrie_v([[C1,C2,C3],[C4,C5,C6],[C7,C8,C9]],[[C3,C2,C1],[C6,C5,C4],[C9,C8,C7]]).
    symetrie_h([[C1,C2,C3],[C4,C5,C6],[C7,C8,C9]],[[C7,C8,C9],[C4,C5,C6],[C1,C2,C3]]).

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    rotDroite(M,R) :-
      reverse(M,T),
      transp(T,R).
     
    rotGauche(M,R) :-
      reverseLignes(M,T),
      transp(T,R).
     
    rot180(M,R) :-
      reverseLignes(M,T),
      reverse(T,R).
     
    reverseLignes([], []).
    reverseLignes([L1|M1], [L2|M2]) :-
      reverse(L1,L2),
      reverseLignes(M1, M2).
    Exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ?-  M = [[1,2,3,4],[5,6,7,8],[9,10,11,12]],
      rotGauche(M,RG),
      rot180(M,Rot180),
      rotDroite(M,RD).
     
    M = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
    RG = [[4, 8, 12], [3, 7, 11], [2, 6, 10], [1, 5, 9]],
    Rot180 = [[12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]],
    RD = [[9, 5, 1], [10, 6, 2], [11, 7, 3], [12, 8, 4]]
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Au fait je me suis pas bien exprimé :
    Ce que je voudrai faire c’est avoir tous les possibilités si on fait une rotation 3D de la matrice.
    Par exemple :
    ? rotation([[0,0,1],[1,0,0],[0,0,0]],X).
    X = [[1,0,0],[0,0,0],[0,1,0]] ;
    X = [[0,0,0],[0,0,1],[1,0,0]] ;
    X = [[0,1,0],[0,0,0],[0,0,1]] ;
    X = [[1,0,0],[0,0,1],[0,0,0]] ;
    X = [[0,0,0],[1,0,0],[0,0,1]] ;
    X = [[0,0,1],[0,0,0],[0,1,0]] ;
    X = [[0,1,0],[0,0,0],[1,0,0]] ;

    NO

    http://picasaweb.google.com/TimTim2007/Pr

    À partir de la grille 1 on obtient les autres avec des rotations 3D …et j’espère je les ai cité tous

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Quand je vois les mots "matrice" et "rotation" dans la même phrase, J'ai tendance à penser à ça:



    Source


    Est-ce que tu pourrais donner des précisions concernant le contexte de ton problème ? parce là je vois pas...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Au fait à partir d’un état de la grille je génère tous les mouvements possibles.
    apres j’ai pensé à éliminer les doublants pour question d’optimisation .

    Et jde pense j'ai trouvé une réponse à ma dernière question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rot3D(L,X):-
       rotation_d_g_180(L,X),
       symetrie_h(L,M),
       rotation_d_g_180(M,X).
    Mais j'ai pas encore tester ça ...

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par timtim2007
    apres j’ai pensé à éliminer les doublants pour question d’optimisation 
    C'est pas du tout une histoire d'optimisation. Si un problème a 5 solutions, il n'en a pas 4 ni 6, ni aucune. Il en a 5 et donc le prédicat Prolog correspondant devra retourner ces 5 solutions, ni plus ni moins, point barre.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Supposons qu'on a une grille 3x3 et elle est vide.

    le fait de jouer ce coup [[p,v,v],[v,v,v],[v,v,v]] c'est le même coup si je joue
    [[v,v,p],[v,v,v],[v,v,v]] ou [[v,v,v],[v,v,v],[v,v,p]] ou [[v,v,v],[v,v,v],[p,v,v]].

    tu regarde la matrice d'un côté parmi les quatre.

    Non ?

  8. #8
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par timtim2007
    Supposons qu'on a une grille 3x3 et elle est vide.

    le fait de jouer ce coup [[p,v,v],[v,v,v],[v,v,v]] ...
    C'est marrant, j'ai vu un problème similaire trainer sur le forum il n'y a pas si longtemps... Ca sent le projet Prolog à plein nez ! Vous savez, les profs aussi connaissent les forums de developpez.com.

    Sinon, pour répondre à la question, oui, on peut utiliser les symétries et rotations pour éviter de réécrire plusieurs fois les mêmes choses. Pour cela, il faut :
    1. effectuer le transformation
    2. effectuer l'opération
    3. effectuer le transformation inverse
    C'est d'ailleurs ce qui est fait dans l'autre sujet avec les transpositions de matrice...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par pcaboche
    Ca sent le projet Prolog à plein nez !
    Oui c'est bien ça

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

Discussions similaires

  1. rotation d'une matrice
    Par paladice dans le forum Langage
    Réponses: 1
    Dernier message: 02/12/2010, 15h41
  2. Réponses: 3
    Dernier message: 17/04/2009, 11h32
  3. Réponses: 3
    Dernier message: 21/09/2007, 16h28
  4. rotation d'une matrice
    Par romain1986 dans le forum C
    Réponses: 13
    Dernier message: 09/05/2007, 16h41
  5. Réponses: 8
    Dernier message: 07/09/2006, 09h08

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