Différences
Ci-dessous, les différences entre deux révisions de la page.
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]] |