3d function plots
[PyX/mjg.git] / gallery / path / tree.py
blob839ed14b594a9eb0da4e9915b180e7461d773761
1 # -*- coding: ISO-8859-1 -*-
2 # fractal tree
3 # contributed by Gerhard Schmid and André Wobst
5 from pyx import *
7 # base tree length
8 l = 5
10 # base transformations for the left, center, and right part of the tree
11 ltrafo = trafo.rotate(65).scaled(0.4).translated(0, l * 2.0 / 3.0)
12 ctrafo = trafo.rotate(-4).scaled(0.75).translated(0, l)
13 rtrafo = trafo.mirror(90).rotated(-65).scaled(0.35).translated(0, l)
15 def tree(depth):
16 "return transformations for a recursive tree of given depth"
17 r = [trafo.rotate(5)]
18 if depth > 0:
19 subtree = tree(depth - 1)
20 r.extend([t*ltrafo for t in subtree])
21 r.extend([t*ctrafo for t in subtree])
22 r.extend([t*rtrafo for t in subtree])
23 return r
25 c = canvas.canvas()
26 for t in tree(7):
27 # apply the transformation to a "sub"-canvas and insert it into the "main" canvas
28 c.insert(canvas.canvas([t])).stroke(path.line(0, 0, 0, l))
29 # note that there is a difference when only transforming the line as in:
30 # c.stroke(path.line(0, 0, 0, l), [t])
31 # The difference is, that the linewidth would not be scaled down.
32 c.writeEPSfile("tree")
33 c.writePDFfile("tree")