In this workbook, we'll get beyond straight lines to consider curves in 2D.

The workbook ends with a programming assignment (making a train). You may want to look ahead at where we're going (the train assignment) to help you appreciate why we're learning stuff first.

Several pages have required exercises on them. But, as always, feel free to tinker with all of the provided example demos.

Don't forget about the `README.md`

and `QUESTIONS.md`

. And to commit and push to GitHub!

Note: you will want to mix the required reading, the optional reading, and the workbook together.

**Textbook:** Curves are covered in Chapter 15 of Fundamentals of Computer Graphics FCG4_Ch15.pdf. This chapter is admittedly a bit mathematical (I can criticize it since I wrote it). Mix the reading with the lectures and the workbook to connect the intuitions. Chapter 20 of The Big Fun Book of Graphics Hart20-jan19.pdf is strongly recommended, as it covers much of the same material in a different way. We won't cover all the material in class. The required Sections are:

- FCG 15.1 - basic ideas of curves, including parameterizations and piecewise representations
- FCG 15.2 - curve properties (especially continuity)
- FCG 15.3 - polynomial pieces - you need to have the basic intuitions, however, you will not need to do the derivations yourself.
- FCG 15.4 - putting pieces together - this makes things sound more complicated than they are
- FCG 15.5 - cubics - again, you won't have to derive the different cubic types, but make sure you know what hermites and cardinals are
- FCG 15.6.1 - Bezier curves - very important, since they are what gets used in Canvas and many other things.

We, unfortunately, will not cover B-Splines (15.6.2). So this section is optional. But it's incredibly useful.

In Hart, you should read this to clarify and reinforce the required material above, but there isn't anything new, so this can be considered optional.

- Hart 20.0 - basics of curves, a good review of the terms discussed in FCG 15.1-15.3
- Hart 20.1 - the wiggle theorem - make sure you have the intuition that an nth degree polynomial has n-1 wiggles.
- Hart 20.2 - Lagrangian curves - this is also 15.3.6 in FCG - understand the basic idea to know why we don't use these things.
- Hart 20.3 - Hermite curves - these are in 15.3.4 and 15.5.2 of FCG. You won't need to derive them, but understanding what they are will be useful for Beziers and Cardinals, which we will use a lot.
- Hart 20.4 - Bezier curves - these are important, so seeing them more than once may help.

The rest of the Chapter focuses on B-Splines and rational curves, which we won't cover in class.

**Videos:** A few years ago, I made some simple videos trying to explain Bezier curves - these may be helpful (they are optional):

- DeCastlejau 2 - Showing the algorithm for 3 points (a second degree curve)
- DeCastlejau 3 - Showing the algorithm for 4 points (a third degree curve)
- DeCastlejau 4 - Shows the connection between the geometric constructions and the polynomial forms

- Page 1 - A small change to make
- Page 4 - Simple exercise
- Page 8 - Two small programming exercises
- Page 9 - The train! A programming assignment

There are bonus point opportunities as part of the train programming assignment.

Don't forget to commit and push as you work!

Get started on page one.