Weeks 4 and 5 Fall 2015
and Miniproject Specifications.
Last edited 20sep15

\begin{document}
\maketitle

\section{Introduction}
One way to prepare for doing a project for Hypergraphics is to produce a miniproject over a fixed period of time on a topic from a small list of prescribed
topics. A few of the miniprojects completed by past students in the course
subsequently evolved into their major project, but that is not its principal
purpose. This exercise is to work out the technical kinks so that
\begin{itemize}
\item You can formulate and explore a project of your choice with some
confidence that you will not be unprepared.
\item Your mentors can advise me in assessing your proposal for its feasibility and your ability of completing its various steps in a timely manner.
\item You'll get feedback on how you're doing without the implicit penalty
later of having to revise major parts of a suboptimal project in the last
minute.
\end{itemize}

This assignment comes in a diverse format suitable to your prior experience and ambition. Pick one appropriate to
yourself and complete it in the coming week.  Since it doesn't involve much
math, you may still submit the documentation as a .pdf generated by any word
processor you feel comportable with. But, since the next assignment will be a
be start on your webpage beginning with its index.html file
you are invited to start using that format for the documentation. We will
go over this issue on W5 and answer questions in Piazza on that topic.

Remember, the entire project will be in submitted in your repo

\texttt{class198f15/ivanho2/public_html/}

(except that you use your own netid),
and all the files for your project which you chose to publish to the
world  will have a copy (not a link !) in your public_html.

If you're new to programming and not sure how to edit given examples to create
new ones using a text editor, do just Problem 1. If you're ready to tackle
a language but are not very experienced with the process, take on a
version of Problem 2. If you are an experienced programmer, consider doing
Problem 3 for something of a challenge.

\section{Three Choices: Novice, Journeyman, Expert}
Be realistic, neither overly ambitious or cautious in placing yourself at one of these levels.
\subsection{Problem 1: Using Turtle Geometry: Novice Level }
Use Turtle Geometry, either as in
the earlier lesson in Python or with Bob Illyes's turtle graphics, which
understands Javascript,  to invent an interesting design of your own.
Explain in the documentation what mathematical
idea it expresses. You do not need to modify any code, nor even look at any.
You can include screen shots of your common input
and of the output figures,
instead of submitting a whole program in your documentation.

\subsection{Problem 2: Modifying a Given Program: Journeyman Level}
Choose 2a if you are leaning towards towards using Javascript for your
project, and 2b if you are leaning towards Python.
\subsubsection{Version 2a}
Study the Python script on the torus/hypercube rotating in
4D and modify the geometrical part to show a different surface in 3D or
in 4D. You may use your DPgraph explorations as the subject. You may, but
probably should not, modify the part of the program that handles the
interactive input or the OpenGL output unless you have experience with
OpenGL. Discuss the mathematics of your surface in the documentation.

\subsubsection{Version 2b}
Version 2b. Modify the Gregg Tavares Javascript which displays a rotating
cube to displaing a rotating hypercube. You should use Steve Kommrusch's
idea of tracing the hypercube in a single continuous polygon
which visits each edge exaclty once (Eulerian Path). If you don't feel you
can do this, you may use the approach taken in the Python torus/hypercube
approach in Amy Klobuchar's Python program.

Either way, you're translating
a mathematical idea originally encoded in  C, respectively in Python, to
implement  in Javascript. You should use proper mathematical notation for the
common objects, functions and equations.

\subsection{ Version 3: Expert}

Study Bob Illyes's code, and by all means reformat it according to
the style presented by Vassi and Graham on F4, if you wish.
They made an eloquent case for contemporary programminging styles
customary in computer science. Then modify it.

At the least you might write a better but still single page help() function.
Add a few new items, a rotating hypercube for example. Or, provided you
complete it in time, implement some other "language" that produes figures
of your own design. A simple game that teaches some geometry?

\section{Where to find the Bodies}
The folders I used during Week 4 and this assignment refers to are in the foyer of the repository.
Although you can, please to not modify anything
in these folders. Along with the folder itself,
there is a .zip file of it in the zipper/. Copy
that to your own repo space and unzip it,
if you plan to experiment or modify it.
For example, for Python graphics,

\texttt{cd class198f15/} ;; or whatever you named it
\texttt{cp zipper/OpenGL.zip ivanho2/python/ } ;; use your own netid
\texttt{cd ivanho2/python} ;; ditto
\texttt{unzip OpenGL.zip} ;; so your Py/OpenGL
scripts will work.

Be sure to svn-add anything you might want to
work on in the lab/at home, but, please, DO NOT
add large unoriginal items like the OpenGL/ folder
or its zip file!

I will leave these folders on the world visible
class pages a while longer, but then remove them
again at the end of the week.

\end{document}