Satimage Précédent | Suivant
Flocon de neige fractal
Accueil Documentation Smile La bibliothèque de dessin Samples Flocon de neige fractal  
Le flocon de neige fractal est obtenu par itérations successives d'un processus consistant à remplacer chaque segment par une ligne brisée constituée de quatre segments, chacun d'une longueur 1/3 de la taille de l'original. Ici la figure de départ est un triangle équilatéral.

Le script utilise une méthode que vous pouvez utiliser pour accélérer la génération de grands polygones. Au lieu d'utiliser la commande standard LineTo, utilisez la primitive addstr sur un ensemble de points, comme décrit dans le script.
Importer le script

property s : {}
on DrawSnowflakeLoop(a, b, n)
    global xmlgk
    if (n > 0) then
        set {x1, y1} to a
        set {x2, y2} to b
        set {dx, dy} to {(x2 - x1) / 3, (y2 - y1) / 3}
        set c to {x1 + dx, y1 + dy}
        DrawSnowflakeLoop(a, c, n - 1)
        set {dx2, dy2} to {dx / 2 - (sqrt 3) / 2 * dy, (sqrt 3) / 2 * dx + dy / 2}
        set d to {x1 + dx + dx2, y1 + dy + dy2}
        DrawSnowflakeLoop(c, d, n - 1)
        set c to {x1 + 2 * dx, y1 + 2 * dy}
        DrawSnowflakeLoop(d, c, n - 1)
        DrawSnowflakeLoop(c, b, n - 1)
    else
        set s to s & b
        if (count s) > 1000 then
            tell xmlgk to AddPath("L " & (printf parameters s))
            set s to b
        end if
    end if
end DrawSnowflakeLoop
on DrawIt(a, b, n)
    global xmlgk
    set s to {}
    DrawSnowflakeLoop(a, b, n)
    tell xmlgk to AddPath("L " & (printf parameters s))
end DrawIt

set i1 to 20
set i2 to 350
set j to 120
set a to {i1, j}
set b to {i2, j}
set c to {(i1 + i2) / 2, j + (i2 - i1) * (cos pi / 6)}
set t to {c, a, b, c}
set w to 0

repeat with n_steps from 1 to 5
    set w to BeginFigure(w)
    SetPenWidth(0.5)
    SetPenColor({0, 0, 0.8, 1})
    repeat with i from 2 to 4
        MoveTo(item i of t)
        DrawIt(item i of t, item (i - 1) of t, n_steps)
    end repeat
    DrawPath(2)
    EndFigure()
    smilepause 0.2
end repeat
English version
Copyright ©2008 Paris, Satimage