@extends('template') @section('title') Lab 11: Part 3: Recursive Graphics @stop @section('content') # Lab 11: Part 3: Recursive Graphics ## Task 0. Study template file Open `lab11/recursiveGraphics.py` and study the provided box function: ```py def box(x, y, size, color1, canvas): b = Rectangle(size, size, Point(x, y)) b.setFillColor(color1) canvas.add(b) ``` This function draws a single box (Rectangle) of side length `size`, centered at `(x, y)`, filled with the color `color1`. The resulting box is added to the given cs1graphics Canvas (`canvas`). This function is then tested in the main block: ```py if __name__ == '__main__': # TEST FUNCTIONS HERE labcanvas = Canvas(500, 500, 'ivory', 'Example 1') box(100, 160, 200, 'green', labcanvas) box(300, 250, 200, 'red', labcanvas) box(50, 350, 75, 'blue', labcanvas) ``` Producing a graphic that looks like this: ## Task 1. nested boxes Write a recursive function `makeNestedBoxes(x, y, size, color1, color2, canvas)` that produces nested boxes of alternating colors. The largest box is drawn first, filled with `color1`, and then the next box has a side length that is 10 smaller and is filled with `color2`, etc. This pattern continues as long as the size of the box is greater than 10. Your `makeNestedBoxes` function must be recursive. Invocations to test your nested boxes: ```py if __name__ == '__main__': task2canvas = Canvas(500, 500, 'darkolivegreen') makeNestedBoxes(200, 400, 100, 'red', 'ivory', task2canvas) makeNestedBoxes(150, 100, 200, 'purple', 'gold', task2canvas) makeNestedBoxes(400, 200, 180, 'navy', 'lightskyblue', task2canvas) ``` ## Task 2. box pattern Building upon the `makeNestedBoxes` function above, this task adds smaller versions of nested boxes at each of the four corners of every box. The ratio of a box size to the corner box size is 1:3. The corner boxes can only be drawn when they have a size greater than or equal to 10. Your `nestedBoxPattern` function must be **recursive**. Hint: start with only one corner box (e.g. upper left), and when that works, go back and add in the other 3 corner boxes. The patterns above were generated by the following code: ```py if __name__ == '__main__': paper2 = Canvas(600, 600, 'white', 'paper2') nestedBoxPattern(300, 300, 400, 'navy', 'ivory', paper2) paper3 = Canvas(1500, 1500, 'black', 'paper3') nestedBoxPattern(750, 750, 500, 'deeppink', 'slategray', paper3) ``` `nestedBoxPattern` takes 6 parameters: 1. the `x` and `y` point where the box is centered 2. the `size` of the largest box 3. the outermost `color1`, 4. the alternating `color2` 5. the `Canvas` where the drawing should appear Here is a [chart of available cs1graphics colors](../lab01/colors) @include('/labs/lab11_extra/_toc') @stop