The goal of this homework is to extend the work you did for project 1 to incorporate curved motion and velocity control. For the first part, you'll need to implement one of the parametric cubic spline techniques (Bezier, Hermite, B-Spline, or Catmull-Rom) and use it to control the position of the object you moved in project 1. Test the program with a variety of different control point positions to insure it is executing correctly. The interface to control the playing and rewinding can be the same as for project 1.
For the second part of the assignment, you need to implement ease-in, ease-out velocity control, so your object starts at rest (velocity = 0), smoothly accelerates for the first third of the path, maintains a constant velocity for the middle third, and finally decelerates smoothly for the last third, coming to a complete stop at the end of the path. You might want to have several frames at the start and end of the sequence with your object at rest, just to ensure the velocities at the ends are indeed equal to 0.
To accomplish velocity control, you will first have to reparameterize the curve so that you have a table that maps arc-length to the parameter used to generate the curve. You then must specify a distance-time curve using a technique such as the piecewise sine curve method from the text. Alternatively, you can specify an acceleration curve and derive the velocity-time curve and distance-time curve. Just insure that the entire path is traversed by the end of the sequence of frames.
Requirements:
The homework is due at Midnight on Tuesday, March 29.
For this project you should do your implementation using OpenGL or Java3D. You can extend your code from project 1 or start from scratch.
You will submit a zip or tar file containing all of the source code, a Makefile and a README file. The source code must compile (and run) on a CCC machine. Feel free to develop on any platform you like, just make sure things run on a CCC machine before submitting. Submissions which do not compile or do not run successfully will not be graded and will be given 0 points.
The README file should contain an extensive description of what you are handing in, the layout of your code ( a discussion of the overall algorithm). It should also include instructions on compiling and running your program. This README file will count towards your grade. Submissions without a README or submissions with a worthless README will lose significant points.
Submittal will be made using myWPI.
Each homework assignment is graded on a 10 point scale 6 points will be graded for functionality: the program does what the assignment requests. 2 points will be based on documentation in the README, and 2 points will be based on the quality of your design and coding style. Click here for details on the grading policy. This homework is worth 10% of your homework grade.
You will lose 10 percent per day for handing the assignment in late. The late penalty will increment at noon each day.
Since a grade of 0 will be given if the code does not compile and run, it is in your best interest not to submit anything until you have completely tested and evaluated what you have written.