Math 155A - Winter 2001
Programming Assignment #2 aka Computer Assignment #3

Interpolating Splines

Overview:  For this assignment you will write a program that accepts points via the mouse, and draws a spline curve which interpolates them.  Your program will use two kinds of curves: Catmull-Rom curves and Overhauser curves. 

Due date: Tuesday, May 1, midnight.

Your program should support the following:

  1. Left mouse clicks place points in the window.  The curve is updated on the screen interactively with mouse clicks.
  2. The curve interpolates the first and last points, by acting as if the first and last point are placed twice (i.e., the first derivative is zero at the beginning and end of the curve.
  3. The c command ("c" for "curve") toggles between Catmull Rom and Overhauser curves.
  4. The f command removes the first point on the curve.  The l command removes the last point on the curve ("f" for "first" and "l" for "last").  If more than 64 points are placed, then the first point is removed.

I have written a skeletal version of the program, which is placed in the directory P:\Projects\CatmullRomDraw.   This program supports catching mouse clicks, the f and l commands, and clamping to at most 64 points.  It draws only straightline segments, not curves:  your job is to add to the program the ability to draw curves. 
    The sample program has been written to attempt to draw big, black points and thick, colored lines and curves.  Whether this works on any particular machine is implementation dependent (I have tried it on four machines, with as many results.)  

NEW: A sample executable is available as CatmullRomDraw.exe

Helpful hints:

  1. Use one dimensional Bezier curves (with glMap1f, glMapGrid1f, etc).   Use the GL_MAP1_VERTEX_3 version (setting z-coordinates to zero).
  2. Start with the provided sample code.
  3. Watch out for repeated points, so you do not get a divide-by-zero exception in this case.
  4. If you have problems with dropped pixels in thick lines, this is an implementation bug, and is not your fault.

Grading:  Grading is individual as usual.  Please do not modify your files after the due date.  You should be prepared to explain how your program works, and to show examples of the relative advantages and disadvantages of the Catmull-Rom splines and the Overhauser splines.