Open In App

# Y Fractal tree in Python using Turtle

A fractal is a never-ending pattern. Fractals are infinitely complex patterns that are self-similar across different scales. They are created by repeating a simple process over and over in an ongoing feedback loop. Driven by recursion, fractals are images of dynamic systems – the pictures of Chaos.

In this article, we will draw a colorful Y fractal tree using a recursive technique in Python.

Examples:

### Modules required

turtle: turtle library enables users to draw picture or shapes using commands, providing them with a virtual canvas. turtle comes with Python’s Standard Library. It needs a version of Python with Tk support, as it uses tkinter for the graphics.

Functions used:

• fd(x) : draw the cursor forward by x pixels.
• rt(x), lt(x) : rotates the facing direction of the cursor by x degrees to the right and left respectively.
• colormode(): to change the colour mode to rgb.
• pencolor(r, g, b): to set the colour of the turtle pen.
• speed(): to set the speed of the turtle.

Approach :

• We start by drawing a single ‘Y’ shape for the base(level 1) tree. Then both the branches of the ‘Y’ serve as the base of other two ‘Y’s(level 2).
• This process is repeated recursively and size of the Y decreases as level increases.
• Colouring of the tree is done level wise: darkest in the base level to lightest in the topmost.

In the implementation below, we will draw a tree of size 80 and level 7.

 `from` `turtle ``import` `*`` ` ` ` `speed(``'fastest'``)`` ` `# turning the turtle to face upwards``rt(``-``90``)`` ` `# the acute angle between``# the base and branch of the Y``angle ``=` `30`` ` `# function to plot a Y``def` `y(sz, level):   `` ` `    ``if` `level > ``0``:``        ``colormode(``255``)``         ` `        ``# splitting the rgb range for green``        ``# into equal intervals for each level``        ``# setting the colour according``        ``# to the current level``        ``pencolor(``0``, ``255``/``/``level, ``0``)``         ` `        ``# drawing the base``        ``fd(sz)`` ` `        ``rt(angle)`` ` `        ``# recursive call for``        ``# the right subtree``        ``y(``0.8` `*` `sz, level``-``1``)``         ` `        ``pencolor(``0``, ``255``/``/``level, ``0``)``         ` `        ``lt( ``2` `*` `angle )`` ` `        ``# recursive call for``        ``# the left subtree``        ``y(``0.8` `*` `sz, level``-``1``)``         ` `        ``pencolor(``0``, ``255``/``/``level, ``0``)``         ` `        ``rt(angle)``        ``fd(``-``sz)``          ` `         ` `# tree of size 80 and level 7``y(``80``, ``7``)`

Output :