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

MATLAB Discussion :

Automate cellulaire (jeu de la vie)


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Automate cellulaire (jeu de la vie)
    Bonjour à tous, je m'appelle Bastien
    je dois effectuer un projet sur MATLAB et je suis novice en la matière

    Quelqu'un pourrait-il m'aider pour juste une question s'il vous plait ?? voici la question :

    Créer une fonction qui prend en entrée une matrice A qui stocke l'état (0 ou 1) des cellules sur une grille à l'itération N et renvoit une matrice B qui stocke l'état des cellules à l'intération N+1.
    Pour déterminer le nombre de voisins de chaque cellule qui détermine l'état de la cellule à l'itération suivante on doit calculer la somme de la matrice A avec sa translatée d'une cellule dans 8 directions différentes

    Je sais bien comment créer une fonction, etc... mais pour cette question je bute carrément...

    Merci de votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    est-ce que c'est un problème d'algorithme ou de code? Si c'est un problème de code, montre-nous ce que tu as commencé à faire.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Le gros problème c'est comment tu mets à jour les éléments au bord de la matrice (ils n'ont pas de voisins pour les 8 directions).

    Ceci mis à part, pour translater les éléments intérieurs d'une matrice A vers le bas et la gauche (par exemple) et le sommer avec A, il suffit de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    A_interieur= A(2:end-1,2:end-1);
    A_interieur_bas_gauche= A(3:end,1:end-2);
    somme_pour_element_interieurs= A_interieur+A_interieur_bas_gauche;

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    @magelan: Bonjour et merci de m avoir répondu. En fait je ne sais pas qu'elle fonction utiliser. Il faudrait peut être utiliser des boucles for imbriquées ... Enfin je ne sait pas trop. C est pour cela que je viens chercher de l aide...

    @VV33D: Bonjour merci de votre réponse. Voilà, c est mon problème... Comment faire la translation de matrices dans les huit directions... Et que cela se reproduise ensuite, et ensuite... Je ne sais pas quelle fonction utiliser...

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Ce n'est pas dur d'adapter mon code pour avoir la transformée dans les 7 autres directions. Ce code traite la matrice dans son ensemble donc pas besoin de boucle.

    Je te propose la solution suivante (je te laisse l'implémenter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function B= update(A)
    %1/ rajoute ligne et colonne de 0 à droite, gauche, dessus et dessous de A
    %2/ calcul les 8 directions pour la matrice intérieure comme je le fais et fais la somme. Les éléments au bord considèrent qu'ils ont des 0 comme voisins manquants.
    %3/ renvoie cette valeur (de mm dimension que A)
    Pour l'itération, il suffit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n=1:1000
        A= update(A);
    end

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci bien pour votre réponse. Je pense comprendre mais j'ai encore du mal à comprendre ce que vous avez mis en en commentaire. Je suis désolé mais vu que je suis novice, si vous pouviez détailler la chose je vous en serait vraiment reconnaissant...

  7. #7
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function B= update_(A)
    %1/ rajoute ligne et colonne de 0 à droite, gauche, dessus et dessous de A
    [P,Q]= size(A);
    A_extended= zeros(P+2,Q+2);
    A_extended(2:end-1,2:end-1) = A;
    %2/ calcul les 8 directions pour la matrice intérieure comme je le fais et fais la %   somme. Les éléments au bord considèrent qu'ils ont des 0 comme voisins %  manquants.
    directions=[1,1;0,1;-1,1;1,0;-1,0;1,-1;0,-1;-1,-1]';
    somme=0; 
    for d= directions
    somme= somme+ A_extended((2+d(1)):(end+d(1)-1)  ,(2+d(2)):(end+d(2)-1) );
    end
    %3/ renvoie cette valeur (de mm dimension que A)
    B= somme;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    %TEST
    B= update_(ones(3,3))
     3     5     3
     5     8     5
     3     5     3

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Milles Merci pour cette réponse complète je comprends mieux

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

Discussions similaires

  1. Automate cellulaire (jeu de la vie)
    Par Achrouuuf dans le forum Octave
    Réponses: 9
    Dernier message: 25/11/2011, 14h41
  2. Réponses: 7
    Dernier message: 03/02/2010, 23h03
  3. [Turbo Pascal] Jeu de la vie (automate cellulaire)
    Par whatelse dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/10/2009, 01h52
  4. [Conception] Jeu de la vie
    Par deuscapser dans le forum Général Java
    Réponses: 16
    Dernier message: 09/03/2006, 12h47
  5. [VB] projet à réaliser: Jeu de la vie
    Par mauriiice dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/12/2005, 20h06

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