Part One Due: 10 a.m., Wednesday, 18 November 2009
Part Two Due: 10 a.m., Tuesday, 24 November 2009
Summary: At this point in your career, you've learned a number of techniques for making images algorithmically. This project is an opportunity for you to explore some in some more depth.
Purposes: To explore some aspect of image generation in depth. To emphasize the more creative components of this course. To encourage more purposeful image creation.
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 submissions
<email@example.com>. The title of your email should have
CSC151.01 2009F Project and should contain
your response to the appropriate part of the assignment. Scheme code
should be in the body of the message. For part two, you will also
submit two sets of three images and your statements following
the instructions at the bottom of this assignment.
Warning: So that this assignment is a learning experience for everyone, we may spend class time publicly critiquing your work.
It is highly recommended that you read and understand all parts of the assignment document before you begin your work on the project.
While the primary focus of this course is on learning how to write, describe, text, and analyze algorithms, our secondary focus is on writing algorithms that generate “interesting” images. We have certainly explored a wide variety of techniques for generating images. For example, you can
You also know a number of other algorithmic techniques that could support creating images, such as various numeric functions, using lists and vectors to store collections of data, and techniques for repetition. It is now time to challenge yourself to use some of these ideas together to create images of your own design.
Rather than writing code that creates a single image, however, we want to challenge you to think about algorithmic processes that can create many different images depending on the given parameters. Hence the title, “a procedure is worth a thousand pictures.”
You will write a procedure,
that generates the
nth image in a series of at least
1000 related images.
(You should be sure your procedure
works for at least the integers between 0 and 999, inclusive; however,
you may be more successful if you support a larger range of values.) The
images should be reproducible: that is, if a user gives the same
height twice, the resulting images should
be the same. You should not use randomness to vary the images;
instead, the differences should be based solely on the choice
In creating these images, you should strive to use at least three different techniques that we have learned this semester.
Your process should scale appropriately. That is, a 1000x1000 image should look similar to a 100x100 image, just bigger (and perhaps slower to compute). We will certainly use your procedure to create relatively large images that we could comfortably print or use as a backdrop.
To begin your project, write a short proposal consisting of two major parts.
The first part, which we will call the design statement, is intended for non-programmers and should explain the intent of your series. Are you exploring color? The use of shapes? The illusion of depth or motion? The effects of unpredictability on an image? Why?
After your design statement, include a sketch of at least two images from the series showing what you intend your images to look like and how they are likely to differ. (We would prefer hand-drawn sketches, although you may also generate them on the computer.)
The second part, which we will call the technique statement, is intended for your peers (that is, folks who know about as much programming as you do) and should explain the intended programming and algorithmic aspects of your work: what approach(es) do you plan to use to achieve the result you describe in the design statement? Be sure to mention the three (or more) algorithmic techniques you are using and explain how you plan for your procedure to create at least 1000 distinct images.
After finishing your proposal, you should set to work on implementing your design, making sure to meet all of the specifications outlined above.
Once you complete your procedure, update your design and technique statements to reflect how your project actually turned out. If there are points of divergence, you should explain why you changed your approach. Be sure to mention the three (or more) algorithmic techniques you are using and explain how you know that your procedure creates at least 1000 distinct images.
Finally, tell us three values of
n that, when given as
parameters to your procedure, cause it to produce especially interesting
(and distinct) images.
Copy your proposal into the body of an email message and send
<firstname.lastname@example.org>; turn in your sketches at the
beginning of class.
Email your program, updated statements, and representative values
Because it might take a while to create images, you should also provide us with copies of certain images. We would like two sets of images: one giving the three images you've chosen as particularly nice representatives of your series, and the other showing how well your procedure scales the images to different sizes. Here's how.
.scmfile containing your Scheme code into this directory.
nand create images of size 50x50, 100x100, and 200x200 with that
username1, etc., are the usernames of the team members,
nnnis the number used to generate the image, and
sizeis the size of the image (e.g.,
.tar.gzfile you just created to the email where you turn in your assignment.
Professor Kluber will visit our class the week after this project is due to discuss and assess the aesthetics of your work and your success in meeting the criteria you have stated for yourself.
We will assess your code, your description of the code, and your success in using multiple techniques together. We may consider following criteria:
n? You should not use randomness.)
Copyright (c) 2007-9 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
or send a letter to Creative Commons, 543 Howard Street, 5th Floor,
San Francisco, California, 94105, USA.