nicolas liautaud

3d fractal illustration math

Fractale 3D dite Éponge de Menger. A chaque itération on coupe chaque cube en trois en long, en large et en travers, puis on retire les cubes centraux.

Le nombre de petits sucres explose. Un, vingt, quatre cent, huit mille, cent-soixante mille… En cinq étapes, on empile trois millions et deux-cent mille petits cubes.

Millions de petits grains de sables indépendants, s’assemblent et se rangent. Font des grains de sable vachement plus gros.

Le désordre.

Modèles 3D générés en python.

##
# Naive generation of a Menger Sponge in Maya
# nliautaud 2010
##
 
from maya.cmds import *
from math import *
 
def mengerSponge(x, y, z, sz, it, lvl=0):
    if lvl==it:
        polyCube(w=sz, h=sz, d=sz)
        move(x, y, z)
    else:
        s = sz / 3.0;
        rng = (-1, 0, 1)
        for x,y,z in list((x+i*s,y+j*s,z+k*s)
            for i in rng for j in rng for k in rng
            if(abs(i)+abs(j)+abs(k) != 0 and abs(i)+abs(j)+abs(k) != 1)
        ) : mengerSponge(x,y,z,s,it,lvl+1)
 
def run(it=0, sz=50.0):
    if objExists('pCube1'):
        select(all=True)
        delete()
    mengerSponge(0, 0, 0, sz, it)
    select(cl=True)
    viewFit()
 
def win():	
    window(t='Menger Sponge')
    columnLayout(rs=20)
    intSliderGrp(l='Iteration',
        field=1, min=0, max=3, v=0,
        cc=lambda x:run(int(x)))
 
run()
win()