Mehmet Nuri Tike   ID: 125081-0 Sec:2

Important Functions and Data Structures: 
	Colors   : my matrix to hold the colors. made up of 9 rows each corresponding to a different color.
	
	Shape_Type : the class to represent a single shape. type=3 means triangle, type=4 means rectangle and type=5 means circle.
			cx and cy are the center coordinates due to my coordinate system. in triangle or rectangle center is the cen			ter of weight. radius is the radius if it is a circle. w and h correspond the width and height of rectangle . w 			also correspond to the base line width of rectangle. height of rectangle is obtained by h=4/5*w later. Color 			correspond to the color represented in Colors matrix.
	
	Shape_Type::Draw() : draws the object due to its type. Drawing rectangle and triangle is trivial by primitives. To draw a 
			circle I used the midpoint circle drawing algorith in the textbook to obtain the surrounding points and 
			then I draw lines between these points to fill it. When the size of the window is enlarged I draw more 
			lines between the lines that I had drawn before to avoid some white lines between lines.

	Shape_Type::Compare(GLfloat x,GLfloat y) : this function is called when mode=Delete and mouse is clicked in the drawing 
			region. It decides whether the (x,y) point(coordinates are due to my coordinate system) is in this shape.

	Shape_List : the class that holds an array of shapes that had been drawn so far in chronological order. 
	Shape_List::Add_Shape(....) : adds a new Shape_Type object to the end of the shapes array. if capacity is already full calls			resize function.

	Shape_List::Delete(i) : deletes i+1 th shape from the array and shifts the shapes after that to the left.

	RenderScene() : called by glutDisplayFunc. First draws the shapes in my Shapes_List object than draws teh file menu bar 
			and the color bar by calling fuctions Draw_File_Bar() and Draw_Color_Panel.

	Mouse_Motion_Function(...) : called by glutPassiveMotionFunc. due to the movement of the mouse it attaches or detaches 
			mouse buttons to corresponding menus.

	Add_or_Delete_Shape(GLfloat x,GLfloat y) : due to the mode it either adds a new shape centered at (x,y) to Shape_List 
			object or deletes a shape in which the point is. If more than one such shape exist the last one is deleted
			since it is drawn the most recent.   

	Determine_Color(...) : if mouse is clicked to one of the nine color, deicdes which one it is and sets the current color to 
			that.

	ChangeSize(int w,int h) : wRate and hRate values are obtained using the new values for width and height and the initial 
			values for these. These rates(wRate, hRate) are used  when converting from pixel coordinate system to my 
			coordinate system or back.
	
	myInit() : Creates the menus and calls the glOrtho function. left=0, top=0, bottom=640, right=480
	

Algorithms :
	I think I hve not used such an important algorithm. I have explained how I had drawn a circle above. Deciding whether a 
		given point is in a shape is trivial by little geometry knowledge. 

Platform: Windows (Visual Studio C++)
Compilation and Execution : I compiled and ran the program using Visual Studio C++ on Windows.
	All necessary dll's, .lib and .h files of OPENGL and GLUT should be in their corresponding
	folders under Windows\System and Visual Studio. Then the program is ready to run either
	from run command from Visual C++ or by executable file under Debug folder. 
	By default the color is black and the mode of the drawing menu is Triangle.
