Comp 212 Project #2: Koch Curves
In this project we will write a program to generate a type of fractal curves
called "Koch curves". This is a classic recursion exercise used in
many CS courses around the world. We're going to make an OO version that is
different from (better than, naturally!) any other implementation -- one that
shows off the power and flexibility of proper abstraction using OO modeling
and design patterns.
The first thing you should do is to read the general discussion
of Koch curves.
The next thing you should do is to run the demo of the final
product. Your final code should replicate all the functionality of
the demo except the counting of the line segments.. (Did you try all
the distinct combinations of button clicks and drop-list selections?).
There is a security loophole that allows one to download the Koch applet demo
code. You are not allowed to reverse engineer the applet code to do the
Koch project.
Your final code should have minimally these features and capabilities:
- A mutable Koch curve object that is capable of "growing", which
is to replace all line segments with collections of line segments. The Koch
curve should appear to change shape when it grows.
- The specifics of replacing a line segment with a collection of line segments
should be a variant process. That is, the pattern of line segments used to
replace a single line segment should be encapsulated separately from the Koch
curve object. Thus the pattern used to "grow" should be changeable
between growth iterations.
- The number of Koch curves held by a non-base case Koch curve object must
be limited only by memory constraints. Empty/unused placeholders are not allowed!
- An MVC design pattern must be utilized.
- No class in the view package can reference an object of any type defined
in the model package.
- No class in the model package can reference an object of any type defined
in the view package.
- Model-view communications should be designed for minimalism.
- Anonymous inner classes should be used whenever only a single instance of
a type is required.
- The maximum number of line segments in the curve should be determined solely
by the memory capabilities of the computer upon which the program is running.
Empty/unused placeholders are not allowed!
- The counting of line segments is optional (it's easy to add--why not do
it?).
- A snowflake factory must be able to use any type of Koch curve to
generate its figure.
- No if statements or conditional
statements of any sort are allowed! This implies that no for-loops
or while-loops are allowed
either.
- If you choose to use LRStruct and its IAlgo, you may not modify their
code in any way.
See the Hints Page for supplied code, math and other
help.
Milestones:
Milestone #1 (35% of the grade): Due Monday, March 15, 2004,
@ 11:59 PM
Submit the following.
- UML class diagrams and stub code for the Koch curve, the abstract factory
that manufactures the Koch curve objects, and all other supporting classes
(for example, LRStruct and its IAlgo, if you choose to use them). The code
should compile.
- Each method in each of the classes must be fully documented in javadoc.
For example, the Koch curve class must have a high level description how it
grows and draws itself. Each method of the Koch curve must describe clearly
its parameters and what it does. If you choose to use LRStruct and IAlgo,
you do not have to document them. However, you do have to document their use.
- The usual README file.
Your design should be an OO design with appropriate OO design patterns. Explicitly
spell out the design patterns you are using in your documentation. You will
be graded on the quality of your OO design.
To submit Milestone 1:
Log on to an owlnet workstation.
type: turnin -c comp212 -p koch1 mydir
where mydir is the directory containing the files you wish to submit.
Make sure to not put a slash at the end of mydir.
Milestone #2 (65% of the grade): Due
Monday, March 29, 2004 @ 1:00 PM
Submit the following.
- A complete program that possesses all the features and capabilities listed
above.
- The UML class diagrams should be organized into three groups.
- UML class diagram and javadoc for Koch curve and its supporting classes.
If you use LRStruct and IAlgo, you only need to display them in their
minimal form. This diagram should show only the abstract factory used
to manufacture Koch curves.
- UML class diagram and javadoc for the Koch curve abstract factory, its
concrete subclasses, and other supporting classes (such as the provided
affine transformation class). There must be at least two distinct factories
producing basic patterns and two distinct factories producing snowflake
patterns.
- UML class diagram and javadoc for the MVC design. You only need to display
the Koch curve and its abstract factory in their minimal form in this
diagram.
- The usual README file
You will be graded on OO design and functionality.
To submit Milestone 2:
Log on to an owlnet workstation.
type: turnin -c comp212 -p koch2 mydir
where mydir is the directory containing the files you wish to submit.
Make sure to not put a slash at the end of mydir.