Pyramide de Sierpinsky
Fractale 3D basée sur le triangle de Sierpinski.
Principe grossier : à chaque itération, on remplace chaque pyramide par cinq pyramides plus petites empilées.
Génération des modèles : Maya, Mel-Python.
Images : 3ds max, VRay.
Itération | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Éléments | 1 | 5 | 25 | 125 | 625 | 3.125 | 15.625 | 78.125 |
Polygones | 5 | 25 | 125 | 625 | 3.125 | 15.625 | 78.125 | 390.625 |
Fichier .obj | 1.1 Ko | 5.2 Ko | 25.5 Ko | 130 Ko | 675 Ko | 3.4 Mo | 17.4 Mo | ~95 Mo |
Génération 1) | < 1 sec | < 1 sec | < 1 sec | < 1 sec | 1 sec | 2 sec | 9 sec | ? |
Rendu 2) | < 30 sec | < 30 sec | < 30 sec | < 30 sec | 30 sec | 45 sec | 90 sec | ? |
- sierpinskiPyramid.py
## # Sierpinski Pyramid # p01 2009 # Maya python script ## from maya.cmds import * from math import * def sierpinskiPyramid(x, y, z, sz, it, lvl=0): if lvl==it: polyPyramid(w=sz) move(x, y, z) rotate(0, '45deg', 0) else: r = sz / 4.0 h = sz / 2.84 childs = [[0,h/2,0],[r,-h/2,r],[r,-h/2,-r],[-r,-h/2,r],[-r,-h/2,-r]] for c in childs: sierpinskiPyramid(x+c[0],y+c[1],z+c[2],sz/2.0,it,lvl+1) def run(it=0, sz=50.0): if objExists('pPyramid1'): select(all=True) delete() sierpinskiPyramid(0, 0, 0, sz, it) select(cl=True) viewFit() def win(): window(t='Sierpinski Pyramid') columnLayout(rs=20) intSliderGrp(l='Iteration', field=1, min=0, max=4, v=0, cc=lambda x:run(int(x))) showWindow() run() win()
→ L'éponge de Menger a été rendue selon la même méthode : Éponge de Menger