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:

Output for depth level: (a) 14 (b) 12

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.

filter_none

edit
close

play_arrow

link
brightness_4
code

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)

chevron_right


Output :




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.