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

  1. #1
    Rédacteur/Modérateur

    [Fractales 5/5] Système de fonctions itérées - IFS - Iterated function system


    Citation Envoyé par Wikipédia
    Un système de fonctions itérées ou IFS (d'après le nom anglais Iterated Function System) est une théorie mathématique développée par John Hutchinson en 1981 mais presque essentiellement utilisée dans le cadre de la géométrie fractale (depuis les travaux de Barnsley en 1988 et son livre Fractals Everywhere). Cette théorie est entièrement fondée sur les invariances par changement d'échelle.
    Voici une fonction permettant le calcul à partir d'IFS :

    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
    function xy = ifs(ifsfile,ifspath)
    %IFS
    %
     
    % 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
     
        [ifsfile,ifspath] = uigetfile('*.ifs');
        if ~ifsfile
            return
        end
     
    end
     
    [S,V,P] = readifs(ifsfile,ifspath);
     
    N = 100000;
     
    P = repmat(P,1,N/100);
    idx = randperm(N);
     
    xy = zeros(N,2);
     
    for n = 1:N
        xy(n+1,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" /> = xy(n,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />*S(:,:,P(idx(n)))+V(P(idx(n)),<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />;
    end


    Cette fonction utilises des fichiers .ifs (a priori du logiciel FRACTINT) dont le format est brièvement expliqué ici : http://www.nahee.com/spanky/www/frac.../ifs_type.html

    Voici la fonction de lecture de ces fichiers :
    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
    function [S,V,P] = readifs(ifsfile,ifspath)
    %READIFS
    %
     
    % 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
        [ifsfile,ifspath] = uigetfile('*.ifs');
        if ~ifsfile
            return
        end
    end
     
    M = load(fullfile(ifspath,ifsfile),'-ascii');
     
    P = ones(1,100);
    k = 1;
     
    S = zeros(2,2,size(M,1));
     
    for n=1:size(M,1)
     
       S(1,1,n) = M(n,1);
       S(2,1,n) = M(n,2);
       S(1,2,n) = M(n,3);
       S(2,2,n) = M(n,4);
     
       V(n,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" /> = M(n,5:6);
     
       f = round(100*M(n,end));
       P(k:k+f-1) = n;
       k = k+f;
     
    end


    Voici une fonction de visualisation :

    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
    function h = drawifs(xy,ax)
    %DRAWIFS
    %
     
    % 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,2,nargin));
     
    if nargin == 1
        figure;
        ax = axes;
    end
     
    axes(ax);
    h = plot(xy(2:end,1),xy(2:end,2),'k.');


    Et la demo :
    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
    function demoifs
    %DRAWIFS
    %
     
    % 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
    %
     
    ifspath = './samples/';
     
    d = dir(fullfile(ifspath,'*.ifs'));
    for n = 1:numel(d) 
        figure('color','w','numbertitle','off','name','IFS Demo');
        ax = axes;
        xy = ifs(d(n).name,ifspath);
        drawifs(xy,ax);
        set(gcf,'color','w')
        title(d(n).name)
        axis equal off
    end


    Les fichiers .ifs récupérés sur le site http://fractals.dyndns.org/index.php?s=main (le site n'est plus disponible) sont ajoutés dans l'archive zip.

    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)
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  2. #2
    Rédacteur/Modérateur

    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Rédacteur/Modérateur

    Quelques images...
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Rédacteur/Modérateur

    et d'autres
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Rédacteur/Modérateur

    D'autres fichiers .ifs construits à partir des données de ce site : http://math.editme.com/ChaosGame (le site n'est plus disponible)

    Si vous en connaissez d'autres, n'hésitez pas à les poster à la suite (sans oublier de citer votre source bien entendu)
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)