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

Téléchargez Discussion :

[Fractales 3/5] Arbre de Pythagore - Pythagoras tree


Sujet :

Téléchargez

  1. #1
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 953
    Points
    52 953
    Par défaut [Fractales 3/5] Arbre de Pythagore - Pythagoras tree


    un petit code rapide qui génère un arbre de Pythagore (Pythagoras Tree en anglais) pour un nombre d'itérations donné :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function [v,th,L] = pythagorastree(N)
    %PYTHAGORASTREE
    %
    %
     
    % Author : Jerome Briot (Dut)
    % Contact : dutmatlab#yahoo#fr -or- briot#cict#fr
    % Profil : www.mathworks.com/matlabcentral/newsreader/author/94805
    %        : www.developpez.net/forums/u125006/dut/
    %
    % Version : 1.0 - 07 Sep 2009
    %
     
    % MATLAB : 7.6.0.324 (R2008a)
    % System : Linux 2.6.24-24-generic
    %
     
    error(nargchk(1,1,nargin));
     
    a = sqrt(2)/2;
    xy = [0 -a 0 a 2*a 3*a 2*a; 0 a 2*a a 2*a a 0].';
     
    v{1} = [-.5 1];
    th{1} = 0;
    L = ones(1,N+1);
     
    for n = 1:N
        L(n+1) = a;
        xy = xy*L(n+1);
     
        for q = 1:size(v{n},1)
     
            temp = [xy ones(size(xy,1),1)] * [cos(th{n}(q)) sin(th{n}(q)) 0 ; -sin(th{n}(q)) cos(th{n}(q)) 0 ; v{n}(q,:) 1];
     
            v{n+1}((q-1)*2+1,:) = temp(2,1:2);
            v{n+1}(2*q,:) = temp(5,1:2);
     
            th{n+1}((q-1)*2+1) = th{n}(q)+pi/4;
            th{n+1}(2*q) = th{n}(q)+-pi/4;
     
        end
     
    end
    et une fonction permettant d'afficher cet arbre pour un nombre d'itérations donné :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    function drawpythagorastree(N)
    %DRAWPYTHAGORASTREE
    %
    %
     
    % Author : Jerome Briot (Dut)
    % Contact : dutmatlab#yahoo#fr -or- briot#cict#fr
    % Profil : www.mathworks.com/matlabcentral/newsreader/author/94805
    %        : www.developpez.net/forums/u125006/dut/
    %
    % Version : 1.0 - 07 Sep 2009
    %
     
    % MATLAB : 7.6.0.324 (R2008a)
    % System : Linux 2.6.24-24-generic
    %
     
    if nargin == 0
        N = 10;
    end
     
    [v,th,L] = pythagorastree(N);
     
    a = sqrt(2)/2;
    xy = [0 -a 0 a 2*a 3*a 2*a; 0 a 2*a a 2*a a 0].';
     
    col = flipud(summer(N+1));
     
    figure('color','w','numbertitle','off')
     
    vertices = [-.5 .5 .5 -.5 ; 0 0 1 1].';
    patch('vertices',vertices,'faces',1:4,'facecolor',col(1,:),'edgecolor',col(1,:));
     
    hold on
     
    for n = 1:N
     
        xy = xy*L(n+1);
     
        for q = 1:size(v{n},1)
     
            temp = [xy ones(size(xy,1),1)] * [cos(th{n}(q)) sin(th{n}(q)) 0 ; -sin(th{n}(q)) cos(th{n}(q)) 0 ; v{n}(q,:) 1];
            patch('vertices',temp,'faces',[1:7 4],'facecolor',col(n+1,:),'edgecolor',col(n+1,:));
     
        end
     
    end
     
    str = sprintf('Pythagoras Tree (%d iterations)',N);
    title(str)
     
    axis equal off
    Voila... si vous avez des remarques, des questions ou des suggestions, n'hésitez pas

    Mais rappelez-vous que je ne suis pas un spécialiste dans ce domaine

    Note : Ne sachant pas si ces codes sont justes, je ne les ai pas optimisés (et donc pas commentés)
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Pour infos, une version plus complète vient d'être postée sur le FEX : Pythagoras tree par Guillaume JACQUENOT

    Elle permet, entre autre, d'obtenir un arbre non-symétrique et d'exporter le résultat au format [ame="http://fr.wikipedia.org/wiki/Svg"]SVG[/ame]

Discussions similaires

  1. Arbre-B ou B-tree
    Par boobs60 dans le forum Décisions SGBD
    Réponses: 0
    Dernier message: 03/11/2010, 14h16
  2. Arbre de pythagore
    Par NTLG75 dans le forum Scheme
    Réponses: 1
    Dernier message: 05/05/2010, 16h16
  3. l'arbre de Steiner (steiner tree)
    Par svince dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 18/01/2006, 10h39

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