$29
Purpose
This programming assignment draws a complex fractal figure using recursive calls. A "Turtle" class will be provided to draw a line segment or changes its forward direction (Lab 2). Then you should derive a "Dragon" class, which draws Dragon curves by calling its methods recursively, using "Turtle"
Please refer the http://sierra.nmsu.edu/morandi/coursematerials/JurassicParkFractal.html (http://sierra.nmsu.edu/morandi/coursematerials/JurassicParkFractal.html)
Heighway Dragon Curves
The Heighway dragon (also known as the Harter–Heighway dragon or the Jurassic Park dragon) was first investigated by NASA (http://en.wikipedia.org/wiki/NASA) physicists John Heighway, Bruce Banks, and William Harter. It was described by Martin Gardner (http://en.wikipedia.org/wiki/Martin_Gardner) in
his Scientific American (http://en.wikipedia.org/wiki/Scientific_American) column Mathematical Games in
1967. Many of its properties were first published by Chandler Davis
(http://en.wikipedia.org/wiki/Chandler_Davis) and Donald Knuth (http://en.wikipedia.org/wiki/Donald_Knuth)
It appeared on the section title pages of the Michael Crichton
(http://en.wikipedia.org/wiki/Michael_Crichton) novel Jurassic Park
(http://en.wikipedia.org/wiki/Jurassic_Park_(novel)) . Here are some examples of Dragon curves.
Construc on of Dragon
For simplicity, let’s focus on 2 levels of dragon curves.
Assuming that Turtle is initially facing right, the following shows the sequence of drawing a level1 right
Dragon curve:
Turn 90
Draw a straight line
Turn 90
Draw a straight line
Now, here is a level1 curve left curve;
Draw a straight line
Turn 90
Draw a straight line
Turn 90
Similar to a level1 curve, a level2 curve has two types, left and right. The following sequence draws a level2 right Dragon curve.
Turn 90
Draw a level1 left curve
Turn 90
Draw a level1 right curve
And a level2 left Dragon curve;
Draw a level1 left curve
Turn 90
Draw a level1 right curve
Turn 90
Note that rightcurve and left curve looks exactly same, but the order of drawing is different.
Now, to go from a levelk to a level k+1, you need to convert each of line segments of level1 curve into a levelk left or right curve.
Statement of Work
Derive the Dragon class from the Turtle using class inheritance. You can You must work on the Dragon class design by yourself. Note that Dragon is inherited from Turtle:
class Dragon : public Turtle
{
...
}
This class must include two public methods, leftCurve and rightCurve, each drawing a levelk left and a levelk right Dragon curve. Thus, those two methods take two arguments, the depth of level and the length of each line segment. Use the following driver program to verify the correctness of your class design.
#include "dragon.h"
#include <iostream
using namespace std;
#include "dragon.h"
#include <iostream
using namespace std;
int main( ) {
right dragon at level 10
Dragon dragon10( 80, 360, 0 ); dragon10.rightCurve( 10, 6 );
right dragon at level 9 Dragon dragon9( 360, 360, 0 ); dragon9.rightCurve( 9, 6 );
right dragon at level 8 Dragon dragon8( 560, 360, 0 ); dragon8.rightCurve( 8, 6 );
right dragon at level 7 Dragon dragon7( 120, 500, 0 ); dragon7.rightCurve( 7, 8 );
right dragon at level 6 Dragon dragon6( 240, 500, 0 ); dragon6.rightCurve( 6, 8 );
right dragon at level 5 Dragon dragon5( 360, 500, 0 ); dragon5.rightCurve( 5, 8 );
right dragon at level 4 Dragon dragon4( 480, 500, 0 ); dragon4.rightCurve( 4, 8 );
right dragon at level 3
Dragon dragon3( 60, 700, 0 ); dragon3.rightCurve( 3, 16 );
right dragon at level 2 Dragon dragon2( 240, 700, 0 );
dragon2.rightCurve( 2, 16 );
right dragon at level 1 Dragon dragon1( 420, 700, 0 ); dragon1.rightCurve( 1, 16 );
}
To view and print out your result in Linux, follow the directions below:
g++ *.cpp
./a.out
ps2pdf output.ps output.pdf
Windows users should view output.ps through Acrobat. Mac OS users can view it through preview.
Once complete, put the <dragon.h, dragon.cpp, Turtle.h, Turtle.cpp, dragonDriver.cpp in the same folder into linux
Compile with the following command:
g++ Turtle.cpp dragon.cpp dragonDriver.cpp
What to Turn in
Clearly state in your code comments any other assumptions you have made. Assumptions about main are placed in the beginning comment block of your program. Assumptions about Turtle and Dragon members are placed in their class definition (.h file). (Of course member functions in the .cpp file are also commented.) What you have to turn in includes:
source codes (do not zip)
(1a) dragon.h,
(1b), dragon.cpp,
(option) DragonDriver.cpp (Your own driver if it is different from the one provided)
your execution output for Dragon in output.pdf (you need to convert it into PDF).
Note that output must be a PDF file but not output.ps file. To get a PDF output on Windows, you must pass output.ps to Acrobat Distiller/Reader, generate the correspoonding graphical view, and then save it in PDF.
Grading Guide and Answers
The following is the grading guide how your homework will be graded. Key answers will be made available after the due date at the Solution page.
Grade Guideline
1. Correctness (26 pts)
Compilation errors(0pt)
Successful compilation without any method implemented (0 pt)
Successful compilation with constructor and at least one recursion method implementation (10 pts)
Dragon output pdf files (4 pts)
Correct dragon implementation (12 pts)
Program Organization (4 pts)
Proper comments (Have to give comments for each method)
Good (2pts) Poor(1 pt) No explanations(0pt)
Coding style (proper indentations, blank lines, variable names, and nonredundant code)