basics of turtle programming
DESCRIPTION
Basics of Turtle ProgrammingTRANSCRIPT
![Page 1: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/1.jpg)
Computer Science 111
Fundamentals of Programming IAdvanced Turtle Graphics
![Page 2: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/2.jpg)
Recursive Patterns in Art• The 20th century Dutch artist Piet Mondrian painted a series
of pictures that displayed abstract, rectangular patterns of color
• Start with a single colored rectangle
• Subdivide the rectangle into two unequal parts (say, 1/3 and 2/3) and paint these in different colors
• Repeat this process until an aesthetically appropriate “moment” is reached
![Page 3: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/3.jpg)
Level 1: A Single Filled Rectangle
![Page 4: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/4.jpg)
Level 2: Split at the Aesthetically
Appropriate Spot
![Page 5: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/5.jpg)
Level 3: Continue the Same Process with Each Part
![Page 6: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/6.jpg)
Level 4
![Page 7: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/7.jpg)
Level 5
![Page 8: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/8.jpg)
Level 6
![Page 9: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/9.jpg)
Level 7
![Page 10: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/10.jpg)
Level 8
![Page 11: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/11.jpg)
Level 9
![Page 12: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/12.jpg)
Design a Recursive Function
• The function expects a Turtle, the corner points of a rectangle, and the current level as arguments
• If the level is greater than 0
– Draw a filled rectangle with the given corner points
– Calculate the corner points of two new rectangles within the current one and decrement the level by 1
– Call the function recursively to draw these two rectangles
![Page 13: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/13.jpg)
from turtle import Turtleimport random
def drawRectangle(t, x1, y1, x2, y2): red = random.randint(0, 255) green = random.randint(0, 255) blue = random.randint(0, 255) t.pencolor(red, green, blue) # Code for drawing goes here
# Definition of the recursive mondrian function goes here
t = Turtle()x = 50y = 50mondrian(t, -x, y, x, -y, 3)
Program Structure
![Page 14: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/14.jpg)
def mondrian(t, x1, y1, x2, y2, level): if level > 0: drawRectangle(t, x1, y1, x2, y2)
vertical = random.randint(1, 2) if vertical == 1: # Vertical split mondrian(t, x1, y1, (x2 - x1) // 3 + x1, y2, level - 1) mondrian(t, (x2 - x1) // 3 + x1, y1, x2, y2, level - 1)
else: # Horizontal split
mondrian(t, x1, y1, x2, (y2 - y1) // 3 + y1, level - 1) mondrian(t, x1, (y2 - y1) // 3 + y1, x2, y2, level - 1)
The mondrian Function
![Page 15: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/15.jpg)
Recursive Patterns in Nature
• A fractal is a mathematical object that exhibits the same pattern when it is examined in greater detail
• Many natural phenomena, such as coastlines and mountain ranges, exhibit fractal patterns
![Page 16: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/16.jpg)
The C-curve
• A C-curve is a fractal pattern
• A level 0 C-curve is a vertical line segment
• A level 1 C-curve is obtained by bisecting a level 0 C-curve and joining the sections at right angles
• A level N C-curve is obtained by joining two level N - 1 C-curves at right angles
![Page 17: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/17.jpg)
![Page 18: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/18.jpg)
Level 0 and Level 1
(50,50)
(50,-50)
(0,0)
(50,-50)
(50,50)
drawLine(50, -50, 50, 50)
drawLine(50, -50, 0, 0)drawLine(0, 0, 50, 50)
![Page 19: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/19.jpg)
Bisecting and Joining
(50,50)
(50,-50)
(0,0)
(50,-50)
(50,50)
0 = (50 + 50 + -50 - 50) // 20 = (50 + -50 + 50 - 50) // 2drawLine(50, -50, 0, 0)drawLine(0, 0, 50, 50)
drawLine(50, -50, 50, 50)
![Page 20: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/20.jpg)
Generalizing
(50,50)
(50,-50)
(0,0)
(50,-50)
(50,50)
drawLine(x1, y1, x2, y2) xm = (x1 + x2 + y1 - y2) // 2ym = (x2 + y1 + y2 - x1) // 2drawLine(x1, y1, xm, ym)drawLine(xm, ym, x2, y2)
![Page 21: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/21.jpg)
Recursing
(50,50)
(50,-50)
(0,0)
(50,-50)
(50,50)
drawLine(x1, y1, x2, y2) xm = (x1 + x2 + y1 - y2) // 2ym = (x2 + y1 + y2 - x1) // 2cCurve(x1, y1, xm, ym)CCurve(xm, ym, x2, y2)
Base case Recursive step
![Page 22: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/22.jpg)
def cCurve(t, x1, y1, x2, y2, level): if level == 0: drawLine(t, x1, y1, x2, y2) else: xm = (x1 + x2 + y1 - y2) // 2 ym = (x2 + y1 + y2 - x1) // 2 cCurve(t, x1, y1, xm, ym, level - 1) cCurve(t, xm, ym, x2, y2, level - 1)
Note that recursive calls occur before any C-curve is drawn when level > 0
The cCurve Function
![Page 23: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/23.jpg)
from turtle import Turtle
def drawLine(t, x1, y1, x2, y2): """Draws a line segment between the endpoints.""" t.up() t.goto(x1, y1) t.down() t.goto(x2, y2)
# Definition of the recursive cCurve function goes here
for level in range(0, 10): t = Turtle() cCurve(t, 50, -50, 50, 50, level)
Program Structure
Draws 10 C-curves of increasing levels of detail
![Page 24: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/24.jpg)
ccurve
A call tree diagram shows the number of calls of a function for a given argument value
Call Tree for ccurve(0)
ccurve(0) uses one call, the top-level one
![Page 25: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/25.jpg)
ccurve
Call Tree for ccurve(1)
ccurve(1) uses three calls, a top-level one and two recursive calls
ccurve ccurve
![Page 26: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/26.jpg)
ccurve
Call Tree for ccurve(2)ccurve(2) uses 7 calls, a top-level one and 6 recursive calls
ccurve ccurve
ccurve
ccurve ccurve
ccurve
![Page 27: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/27.jpg)
ccurve
Call Tree for ccurve(n)ccurve(n) uses 2n+1 - 1 calls, a top-level one and 2n+1 - 2 recursive calls
ccurve ccurve
ccurve
ccurve ccurve
ccurve
![Page 28: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/28.jpg)
ccurve
Call Tree for ccurve(2)The number of line segments drawn equals the number of calls on the frontier of the tree (2n)
ccurve ccurve
ccurve
ccurve ccurve
ccurve
![Page 29: Basics of Turtle Programming](https://reader030.vdocuments.net/reader030/viewer/2022020404/577cc38b1a28aba71196572b/html5/thumbnails/29.jpg)
Summary• A recursive algorithm passes the buck repeatedly to the
same function
• Recursive algorithms are well-suited for solving problems in domains that exhibit recursive patterns
• Recursive strategies can be used to simplify complex solutions to difficult problems