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:arbre_fractal [2010/05/09 15:38]
nico
travaux:arbre_fractal [2010/10/05 00:19]
nico
Ligne 1: Ligne 1:
 +{{tag>​programmation python maya maths}}
 +======Arbre fractal======
  
 +Par position/​rotation (polygonal) :
 +
 +<file python fractalTree.py>​
 +from maya.cmds import polyCube,​xform
 +from math import cos,sin
 +
 +def tree(x,​y,​z,​a,​b,​l,​w,​r,​s,​it,​lvl=0):​
 +    if(lvl<​it):​
 +        polyCube(h=l,​w=w,​d=w)
 +        xform(relative=1,​
 +              translation=(x,​y,​z),​
 +              rotation=(-50*b,​0,​90+a*50),​
 +              pivots=(0,​l*.5,​0)
 +              )
 +        x2 = x + l*cos(a)*cos(b)
 +        y2 = y + l*cos(a)*sin(b)
 +        z2 = z + l*sin(a)
 +        tree(x2,​y2,​z2,​a+s,​b,​l*r,​w*r,​r,​s,​it,​lvl+1)
 +        tree(x2,​y2,​z2,​a-s,​b,​l*r,​w*r,​r,​s,​it,​lvl+1)
 +        tree(x2,​y2,​z2,​a,​b+s,​l*r,​w*r,​r,​s,​it,​lvl+1)
 +        tree(x2,​y2,​z2,​a,​b-s,​l*r,​w*r,​r,​s,​it,​lvl+1)
 +
 +tree(0,​0,​0, ​    # position
 +     ​0,​0, ​      # angle (alpha,​beta)
 +     ​1.0,​.1, ​   # size (length,​width)
 +     ​.7, ​       # size factor
 +     ​1, ​        # spreading (0<​x<​pi/​2)
 +     ​5) ​        # iterations
 +    ​
 +</​file>​
 +
 +Par position (courbes) :
 +
 +<file python fractalTreeCV.py>​
 +from maya.cmds import curve
 +from math import cos,sin
 +
 +class FractalTree():​
 +    '''​Tree in one curve (inexact but light)'''​
 +    def __init__(self):​
 +        self.pts = []
 +        self.it = 7      # tree iterations
 +        self.r = .7      # branch length factor
 +        self.s = .5      # branch spreading (0<​x<​pi/​2)
 +        self.d3 = True   # 3D or 2D tree
 +        self.branch()
 +        curve(p=self.pts,​d=1)
 +    def branch(self,​
 +               ​x=0,​y=0,​z=0,​ # branch position
 +               ​a=0,​b=0, ​    # branch angle
 +               ​l=10, ​       # branch length
 +               ​lvl=0 ​       # branch iteration
 +               ):
 +        if(lvl<​self.it):​
 +            self.pts.append((x,​y,​z))
 +            x2 = x + l*cos(a)*cos(b)
 +            y2 = y + l*cos(a)*sin(b)
 +            z2 = z + l*sin(a)
 +            self.branch(x2,​y2,​z2,​a+self.s,​b,​l*self.r,​lvl+1)
 +            self.branch(x2,​y2,​z2,​a-self.s,​b,​l*self.r,​lvl+1)
 +            if(self.d3):​
 +                self.branch(x2,​y2,​z2,​a,​b+self.s,​l*self.r,​lvl+1)
 +                self.branch(x2,​y2,​z2,​a,​b-self.s,​l*self.r,​lvl+1)
 +
 +tree = FractalTree()
 +</​file>​
 +
 +<file python fractalTreeMultiCV.py>​
 +from maya.cmds import curve
 +from math import cos,sin
 +
 +class FractalTree():​
 +    '''​Every branch is a curve (exact, 20.000+ curves in it-8)'''​
 +    def __init__(self):​
 +        self.it = 6      # tree iterations
 +        self.r = .7      # branch length factor
 +        self.s = .5      # branch spreading (0<​x<​pi/​2)
 +        self.d3 = True   # 3D or 2D tree
 +        self.branch()
 +    def branch(self,​
 +               ​x=0,​y=0,​z=0,​ # branch position
 +               ​a=0,​b=0, ​    # branch angle
 +               ​l=10, ​       # branch length
 +               ​lvl=0 ​       # branch iteration
 +               ):
 +        if(lvl<​self.it):​
 +            x2 = x + l*cos(a)*cos(b)
 +            y2 = y + l*cos(a)*sin(b)
 +            z2 = z + l*sin(a)
 +            curve(p=[(x,​y,​z),​(x2,​y2,​z2)],​d=1)
 +            self.branch(x2,​y2,​z2,​a+self.s,​b,​l*self.r,​lvl+1)
 +            self.branch(x2,​y2,​z2,​a-self.s,​b,​l*self.r,​lvl+1)
 +            if(self.d3):​
 +                self.branch(x2,​y2,​z2,​a,​b+self.s,​l*self.r,​lvl+1)
 +                self.branch(x2,​y2,​z2,​a,​b-self.s,​l*self.r,​lvl+1)
 +
 +tree = FractalTree()
 +</​file>​
 +
 +{{gallery>:​galerie?​fractaltree*&​500x500&​nocrop&​showtitle}}
 +
 +~~DISCUSSION~~