Différences

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
travaux:pyramide_sierpinski [2010/06/05 00:37]
nico ancienne révision restaurée
travaux:pyramide_sierpinski [2010/10/23 16:36]
nico
Ligne 1: Ligne 1:
 +~~META:date created=2010-04-18~~
 +{{tag>3d programmation python maya 3dsmax vray maths}}
 +======Pyramide de Sierpinsky======
  
 +Fractale 3D basée sur le [[wp>​en:​Sierpinski_triangle|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.
 +
 +{{gallery>​..:​galerie?​500x500&​sierpinskipyramid_*&​showtitle}}
 +
 +^  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 ((Ces temps correspondent à la génération du modèle sous Maya, pas au rendu des images. Temps enregistrés sur un i7 860 à 2.8 GHz.))| ​ < 1 sec  |  < 1 sec  |  < 1 sec  |  < 1 sec  |  1 sec  |  2 sec  |  9 sec  |  ?  |
 +^  Rendu ((Ces temps correspondent au rendu des images avec VRay sous 3ds max. Temps enregistrés sur un i7 860 à 2.8 GHz.))| ​ < 30 sec  |  < 30 sec  |  < 30 sec   ​| ​ < 30 sec   ​| ​ 30 sec  |  45 sec  |  90 sec  |  ?  |
 +
 +<file python 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()
 +</​file>​
 +
 +-> L'​éponge de Menger a été rendue selon la même méthode : [[travaux:​eponge_menger]]