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 :

Diamond - Square


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Points : 37
    Points
    37
    Par défaut Diamond - Square
    Salut, je codé l'ago diamondSquare mais le rendu est parfois bizarre. J'aimerai savoir ce que vous pensez du code :

    Code C : 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
    17
    18
    19
    20
    21
    22
    23
    void genere(int tab[][TAILLE], int x, int y, int distance)
    {
     
        if(x+distance>=TAILLE || x-distance<0 || y+distance>=TAILLE || y-distance<0)
            distance--;
     
        int a = tab[y-distance][x-distance], b = tab[y-distance][x+distance], c = tab[y+distance][x+distance], d = tab[y+distance][x-distance],
            e = (a+b+c+d)/4 + random(0, distance);
     
        tab[y][x] = e;
        tab[y-distance][x] = (a+b+e)/3 + random(0, distance); // G
        tab[y][x+distance] = (b+d+e)/3 + random(0, distance); // H
        tab[y+distance][x] = (c+d+e)/3 + random(0, distance); // I
        tab[y][x-distance] = (a+c+e)/3 + random(0, distance); // F
     
        if(distance > 1)
        {
            genere(tab, x-distance/2, y-distance/2, distance/2);
            genere(tab, x+distance/2, y-distance/2, distance/2);
            genere(tab, x+distance/2, y+distance/2, distance/2);
            genere(tab, x-distance/2, y+distance/2, distance/2);
        }
    }

    Je ne vois pas où pourrait étre le beug, mais j'ai parfois de très (très) haut sommets.

    EDIT: Il faut des terrain de taille 2^n + 1, mais pensez-vous que la manière récursive est une bonne chose ? L'algo n'est-il pas faux du coup ?

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Il ne manquerait pas des points lors du calcul "diamond" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[y-distance][x] = (a+b+e)/3 + random(0, distance); // G
    Le calcul de G devrait nécessiter 4 points (qui forment un losange), non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      .-----.  
      |     |
      |  ?  |
      |     |
      A--G--B
      |     |
      |  E  |
      |     |
      D-----C
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Points : 37
    Points
    37
    Par défaut
    D'après ce que j'ai lu, la formule est bien G=(a+b+e)/3 + random(0, distance)
    On arrive de toute manière à G grâce à la récurrence. En fait il se pourrait que l'algo marche, il me parait juste bizarre par moment ^^

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par univscien Voir le message
    D'après ce que j'ai lu, la formule est bien G=(a+b+e)/3 + random(0, distance)
    On arrive de toute manière à G grâce à la récurrence. En fait il se pourrait que l'algo marche, il me parait juste bizarre par moment ^^
    Je ne dis pas qu'il ne marche pas. Je pense juste que ce n'est pas un algo diamond-square, mais un algo mid-point.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Root Mean Square Error
    Par Flow_75 dans le forum MATLAB
    Réponses: 6
    Dernier message: 23/10/2007, 03h18
  2. Réponses: 2
    Dernier message: 16/11/2006, 09h38
  3. Réponses: 18
    Dernier message: 23/08/2006, 09h42
  4. Réponses: 8
    Dernier message: 17/08/2006, 15h02

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