Subdivision of Curves

What is an algebraic plane curve?

An algebraic plane curve is any set of points (x, y) in the plane satisfying a polynomial equation f(x, y) = 0. For example, the circle with radius 1 centered at (0, 0) satisfies the equation x2 + y2 = 1, so it satisfies the polynomial equation f(x, y) = x2 + y2 - 1 = 0, so this circle is an algebraic plane curve.

What is an algebraic surface?

An algebraic surface is any set of points (x, y, z) in 3D space satisfying a polynomial equation f(x, y, z) = 0. For example, the sphere with radius 1 centered at (0, 0, 0) satisfies the equation x2 + y2 + z2 = 1, so it satisfies the polynomial equation f(x, y, z) = x2 + y2 + z2 - 1 = 0, so this sphere is an algebraic surface.

What is subdivision?

Subdivision is a technique that computers use to draw pictures quickly. More precisely, subdivision is a way to take an object (such as an algebraic curve or surface) P and divide it up into smaller pieces, each of which we can divide into smaller pieces, and so on, forever, by doing repeating the same type of fast calculations over and over.

So subdivision is just a way to divide something into smaller and smaller pieces?

Yes. Just remember that we want our subdivision methods to be fast.

OK, but how do you use subdivision to actually draw something?

Suppose you had to write a program to draw a picture of the curve with equation y = ax2 + bx + c, for x varying from 0 to 10. One way to do this is to let x vary from 0 to 10 by intervals of 0.01, i.e. let x equal 0, then 0.01, then 0.02, etc., until x = 10. Then for each value of x, compute the value of y from the above equation, and plot the point (x, y). This technique is very slow and does not use subdivision.

Using subdivision, however, we can speed up this process. Our technique is to create a polygon that approximates the curve. The polygon starts out as just a triangle, but by repeatedly using subdivision, we keep making the polygon closer and closer to the target curve, until the polygon is visually indistinguishable from the curve.

The initial polygon is the triangle with vertices P0 = (0, c), P1 = (5, 5b + c), and P2 = (10, 100a + 10b + c). We call this the control polygon of our curve. Note that P0 is the point on the curve for x = 0, P2 is the point on the curve for x = 10, and P1 is the point of intersection of the tangent lines to the curve at P0 and P2. Now we compute two midpoints: the midpoint P01 between P0 and P1, and the midpoint P11 between P1 and P2. Then we compute the midpoint P02 between P01 and P11. It turns out that P02 is the point (5, 25a + 5b + c), which is exactly the point on the curve for x = 5! Also note that the polygon with vertices P0, P01, P02, P11, and P2, is a better approximation to the curve than the original control polygon was. We have essentially subdivided the original polygon into two control polygons: the first polygon has vertices P0P01P02 and the second polygon has vertices P02P11P2. Now we can repeat the above calculation of three midpoints for each of these two control polygons, to create a total of four control polygons. Note that we will then end up calculating two new points on the curve (one new point per control polygon). We can repeat this process until we get a set of control polygons which is visually indistinguishable from the desired curve. It turns out that, in practice, we have to repeat this process only a small number of times in order to get a very good approximation to the desired curve. Thus, subdivision is a very efficient method for drawing pictures of curves.

This subdivision technique is fast, since all we do is repeatedly compute midpoints. Midpoints can be computed very quickly.

So can't you just subdivide any curve in this fashion?

It's not that simple. The technique described above works for any parametric polynomial curve (such as a parabola, cubic curve, quartic curve, etc.). A modified version of that technique works on rational parametric curves, which are a more general class of curves than polynomials. Rational curves include circles and hyperbolas, in addition to polynomial curves. So we can draw all rational curves quickly. But, there are curves which are not rational. In fact, many algebraic plane curves are actually not rational!

So how do we subdivide algebraic plane curves that are not rational?

This is the focus of my work on subdivision of algebraic curves.