# Assignment 5: Producing Playful Polygons

Due: 10:00 a.m., Wednesday, 3 March 2009

Summary: In this assignment, you will use turtles to explore mechanisms for constructing images based on a variety of polygons. Our focus will be on using lists, iteration, and anonymous procedures as ways to work with the turtle model.

Purposes: To give you more experience with the turtle model. To give you more comfort with anonymous procedures. To explore the complexities possible from simple operations.

Expected Time: Two to three hours.

Collaboration: We encourage you to work in groups of size three. You may, however, work alone or work in a group of size two or size four. You may discuss this assignment with anyone, provided you credit such discussions when you submit the assignment.

Submitting: Email your answer to . The title of your email should have the form `CSC151.01 2010S Assignment 5: Producing Playful Polygons` and should contain your answers to all parts of the assignment. Scheme code should be in the body of the message.

Warning: So that this assignment is a learning experience for everyone, we may spend class time publicly critiquing your work.

## Assignment

### Problem 1: Drawing Polygons

Write a procedure, ```(turtle-polygon! turtle side-length sides )```, that uses a turtle to draw a regular polygon with the specified number of sides, with each side of the specified length.

For example,

`(turtle-polygon! t 100 3)`

`(turtle-polygon! t 100 4)`

`(turtle-polygon! t 60 5)`

`(turtle-polygon! t 40 6)`

Your procedure must return the turtle to its original position and angle. Your procedure must not change the turtle's brush or color.

Hint: The sum of the interior angles of a polygon with `N` sides is (`N`-2)*180.

### Problem 2: Spinning Polygons

Write a procedure, ```(turtle-spin-polygon! turtle side-length sides angle copies)```, that draws the given number of copies of the specified polygon, with the turtle turned an angle of `angle` between polygons.

For example,

`(turtle-spin-polygon! t 50 4 15 10)`

`(turtle-spin-polygon! t 50 4 20 5)`

`(turtle-spin-polygon! t 50 4 5 20)`

`(turtle-spin-polygon! t 50 4 -30 5)`

As is the case in problem one, your procedure must return the turtle to its original position and orientation.

### Problem 3: Scaling Polygons

Write a procedure, ```(turtle-scale-polygon! turtle initial-side-length sides scale-factor copies)```, that draws the given number of copies of the specified polygon, with each copy drawn with a side length `scale-factor` times the the previous side length.

For example, if the initial side length is ten, and the scale factor is two, this procedure would draw polygons with side lengths 10, 20, 40, 80, 160, ....

Similarly, if the initial side length is 100, and the scale factor is 0.9, the procedure would draw polygons with side lengths 100, 90, 81, 72.9, ....

Here are some visual issues.

`(turtle-scale-polygon! t 1 5 2 8)`

`(turtle-scale-polygon! t 1 5 1.2 30)`

`(turtle-scale-polygon! t 100 5 0.9 20)`

As is the case in the previous problems, your procedure must return the turtle to its original position and orientation.

### Problem 4: Centered Polygons

A potential deficiency of each of the prior two procedures is that multiple polygons are joined at a vertex. The problem is, of course, that our basic polygon procedure draws polygons starting at a particular point, rather than centered at a certain point.

Write a procedure, ```(turtle-centered-polygon! turtle radius sides)```, that uses `turtle` to draw a polygon of the appropriate number of sides, centered at the current position of the turtle, and enclosed in a circle of radius `radiius`.

• lift the pen;
• advance the turtle by `radius`;
• turn the turtle some amount in preparation for drawing the polygon;
• drop the pen;
• draw the polygon using `turtle-polygon!`;
• lift the pen;
• turn the turtle to face the center of the polygon;
• advance the turtle by `radius` to return to the center; and
• turn the turtle back to its original orientation.

Note: For a polygon with interior angle `a` and radius `r`, the side length is 2*`r`*cos(`a`/2).

As is the case in the previous problems, your procedure must return the turtle to its original position and orientation.

### Problem 5: Spun and Scaled Polygons, Revisited

Write procedures, ```(turtle-spin-centered-polygon! turtle radius sides angle copies)``` and ```(turtle-scale-centered-polygon! turtle initial-radius sides scale-factor copies)```, that behave similarly to `turtle-spin-polygon!` and `turtle-scale-polygon!`, except using centered polygons.

### Problem 6: Spun and Scaled Polygons, Re-Revisited

Write a procedure, ```(turtle-spin-and-scale-centered-polygon! turtle initial-radius sides angle scale-factor copies)```, that makes the given number of copies of the polygon, scaling and spinning each subsequent polygon.

### Problem 7: Creative Polygons

Write a program that systematically generates an interesting image composed of a series of polygons. In addition to spinning and scaling polygons, you may find it useful to shift their position, change their color or brush, or even change the number of sides between subsequent polygons.

## Important Evaluation Criteria

We will judge your solutions on their correctness, their conciseness, and the cleverness.

Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-10 Janet Davis, Matthew Kluber, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials copyright by John David Stone and Henry Walker and used by permission.)

This material is based upon work partially supported by the National Science Foundation under Grant No. CCLI-0633090. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.

This work is licensed under a Creative Commons Attribution-NonCommercial 2.5 License. To view a copy of this license, visit `http://creativecommons.org/licenses/by-nc/2.5/` or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.