Welcome to CS 177!

Welcome to the blog for CS 177.  Here you’ll find course notes, lecture slides, and homework (see links on the right).

If you are a student in the class, please register now by clicking here!

A few things to note:

  • By default, you will be subscribed to receive email notification about new posts, comments, etc.  If you prefer not to receive email, you can manage your subscriptions from the subscriptions page. (Another way to get updates is to subscribe to the RSS feed.)
  • You can ask questions by leaving a comment on a blog post.  If you’re feeling apprehensive about asking questions in public, feel free to register under a pseudonym.
  • You can include mathematical notation in your questions using standard $\LaTeX$ syntax.  For instance, the expression \int_M K dA = 2\pi\chi becomes $\int_M K dA = 2\pi\chi$ when enclosed by a pair of dollar signs
  • For fun, you can associate a picture to your profile by registering your email address at Gravatar.com.
If you encounter any problems while trying to use the blog, please contact the TA at keenan@cs.caltech.edu.

Homework 0 Assigned

This term we’d like to encourage class participation through use of this blog.  Therefore, your first assignment is to:

  1. create an account, and
  2. leave a comment on this post.
To make things interesting, your comment should include a description of your favorite mathematical formula typeset in $\LaTeX$.  If you don’t know how to use $\LaTeX$ this is a great opportunity to learn — a very basic introduction can be found here.  (And if you don’t have a favorite mathematical formula, this is a great time to pick one!)  Note that if you’d rather not use your real name in public you’re welcome to register under a pseudonym.

Homework 1 Assigned

The first assignment is available here:

Please turn solutions in no later than 5 pm on Thursday, October 13th.  You can either email solutions to keenan@cs.caltech.edu or deposit them outside 329 Annenberg.

The best way to get help is to leave a comment on this blog post!  This way other students can benefit from your questions as well.  However, if you’d prefer to discuss the material in private you can email keenan@cs.caltech.edu or come to office hours (time and location TBD).

A Quick and Dirty Introduction to the Geometry of Surfaces

There are many ways to think about the geometry of a surface (using charts, for instance) but here’s a picture that is similar in spirit to the way we work with surfaces in the discrete setting. Imagine that our surface is a topological disk. Its geometry can be described via a map \(f: M \rightarrow \mathbb{R}^3\) from a region \(M\) in the Euclidean plane \(\mathbb{R}^2\) to a subset \(f(M)\) of \(\mathbb{R}^3\):

The differential of such a map, denoted by \(df\), tells us how to map a vector \(X\) in the plane to the corresponding vector \(df(X)\) on the surface. Loosely speaking, imagine that \(M\) is a rubber sheet and \(X\) is a little black line segment drawn on \(M\). As we stretch and deform \(M\) into \(f(M)\), the segment \(X\) also gets stretched and deformed into a different segment, which we call \(df(X)\). Later on we can talk about how to explicitly express \(df(X)\) in coordinates and so on, but it’s important to realize that fundamentally there’s nothing deeper to know about the differential than the picture you see here — the differential simply tells you how to stretch out or “push forward” vectors as you go from one space to another. For example, the length of a tangent vector \(X\) pushed forward by \(f\) can be expressed as

\[ \sqrt{ df(X) \cdot df(X) }, \]

where \(\cdot\) is the standard inner product (a.k.a. dot product or scalar product) on \(\mathbb{R}^3\). More generally, we can measure the inner product between any two tangent vectors \(df(X)\) and \(df(Y)\):

\[ g(X,Y) = df(X) \cdot df(Y). \]

The map \(g\) is called the metric of the surface, or to be more pedantic, the metric induced by \(f\).

So far we’ve been talking about tangent vectors, i.e., vectors that travel “along” the surface. We’re also interested in vectors that are orthogonal to the surface. In particular, we say that a vector \(u \in \mathbb{R}^3\) is normal to the surface at a point \(p\) if

\[ df(X) \cdot u = 0 \]

for all tangent vectors \(X\) at \(p\). For convenience, we often single out a particular normal vector \(\hat{N}\) called the unit normal, which has length one. Of course, at any given point there are two distinct unit normal vectors: \(+\hat{N}\) and \(-\hat{N}\). Which one should we use? If we can pick a consistent direction for \(\hat{N}\) then we say that \(M\) is orientable. For instance, the torus is orientable, but the Möbius band is not:

For orientable surfaces, we can actually think of \(\hat{N}\) as a continuous map \(\hat{N}: M \rightarrow S^2\) (called the Gauss map) which associates each point with its unit normal, viewed as a point on the unit sphere \(S^2 \subset \mathbb{R}^3\). In fact, why not think of \(\hat{N}\) as simply a different geometry for \(M\)? Now the map \(d\hat{N}\) (called the shape operator) tells us about the change in normal direction as we move from one point to the other. For instance, we could look at the change in normal along a particular tangent direction \(X\) by evaluating

\[ \kappa_n(X) = \frac{df(X) \cdot d\hat{N}(X)}{|df(X)|^2}. \]

(The factor \(|df(X)|^2\) in the denominator simply accounts for any “stretching out” of \(X\) that occurs as we go from the plane to the surface.) The quantity \(\kappa_n\) is called the normal curvature — we’ll have a lot more to say about curvature in the future.

Overall we end up with this picture, which captures the most fundamental ideas about the geometry of surfaces:

Conformal Parameterization

When we talked about curves, we introduced the idea of an isometric (a.k.a. arc-length or unit speed) parameterization. The idea there was to make certain expressions simpler by assuming that no “stretching” occurs as we go from the domain to \(\mathbb{R}^3\). Another way of saying this is that

\[ |df(X)| = |X|, \]

i.e., the norm of any vector \(X\) is preserved.

For surfaces, an isometric parameterization does not always exist (not even locally!). Sometimes you simply have to stretch things out. For instance, you may know that it’s impossible to flatten the surface of the Earth onto the plane without distortion — that’s why we end up with all sorts of different funky projections of the globe.

However, there is a setup that (like arc-length parameterization for curves) makes life a lot easier when dealing with certain expressions, namely conformal parameterization. Put quite simply, a map \(f\) is conformal if it preserves the angle between any two vectors. More specifically, a conformal map \(f: \mathbb{R}^2 \supset M \rightarrow \mathbb{R}^3\) satisfies

\[ df(X) \cdot df(Y) = a \langle X, Y \rangle \]

for all tangent vectors \(X, Y\), where \(a > 0\) is a positive scale factor and \(\langle \cdot, \cdot \rangle\) is the usual inner product on \(\mathbb{R}^2\). Vectors can still get stretched out, but the surface never gets sheared — for instance, orthogonal vectors always stay orthogonal:

A key fact about conformal maps is that they always exist, as guaranteed by the uniformization theorem. In a nutshell, the uniformization theorem says that any disk can be conformally mapped to the plane. So if we consider any point \(p\) on our surface \(f(M)\), we know that we can always find a conformal parameterization in some small, disk-like neighborhood around \(p\). As with unit-speed curves, it is often enough to simply know that a conformal parameterization exists — we do not have to construct the map explicitly. And, as with arc-length parameterization, we have to keep track of the least possible amount of information about how the domain gets stretched out: just a single number at each point (as opposed to, say, an entire Jacobian matrix).

The Fundamental Polygon

We’ve received a couple questions on homework problem 2.2 regarding whether a constructive proof is necessary, i.e., do you need to actually come up with examples of triangulations that achieve the desired bounds? The answer is no: you simply need to show (algebraically) that these bounds hold.

But if you were looking for a constructive proof, a nice tool to know about is something called the fundamental polygon. The basic idea is that a torus of any genus can be cut into a single disk, which can be visualized as a polygon in the plane. Visualizing a triangulation (or other data) on the fundamental polygon is often much simpler than visualizing it on the embedded torus — consider this example, for instance:



Here the arrows mark identifications of edges — for instance, the top and bottom edges get “glued” together along the positive \(x\)-axis. (Try convincing yourself that these gluings really do produce a torus — note that at some point you’ll need to make a \(180^\circ\) “twist.”) One way to visualize the identifications is to imagine that the fundamental polygon tiles the plane:

The torus is interesting because it actually admits two different funamental polygons: the hexagon and the square (corresponding to two different tilings of the Euclidean plane). So we could also visualize the torus on the square, leading to an even simpler triangulation:



(By the way, is this really what you’d call a triangulation? Each region certainly has three sides, but each “triangle”‘ has only one vertex! What about the first example? There all triangles have three vertices, but they share the same three vertices. So combinatorially these triangles are not distinct — another way of saying this is that they do not form a valid simplicial complex. What’s the smallest simplicial decomposition you can come up with for the torus?)


In general the fundamental polygon for a torus of genus \(g\) has \(4g\) sides with identifications \(a_1 b_1 a_1^{-1} b_1^{-1} \cdots a_n b_n a^{-1}_n b_n\), where two edges with the same letter get identified and inverse just means that the edge direction is reversed. For instance, the fundamental polygon for the double torus looks like this:



(Note that all the polygon vertices ultimately get identified with a single point on the surface.) From here it becomes easy to start playing around with tessellations — for instance, here’s how you decompose a surface of any genus into quadrilaterals, using only two irregular vertices (can you do better?):



Tiling the Euclidean plane with the fundamental polygon is impossible for a surface of genus \(g \geq 2\), since the interior angles of the fundamental polygon don’t evenly divide \(2\pi\) (proof!). Fortunately, we can still tile the hyperbolic plane, i.e., the plane with constant negative curvature. For instance, here’s a tiling of the hyperbolic plane by octagons:



From here there are all sorts of fascinating things to say about covering spaces, uniformization, and especially the fundamental group of a surface — if you’re interested I highly recommend you take a look at Allen Hatcher’s (free!) book on algebraic topology.

A Quick and Dirty Introduction to the Geometry of Curves

The picture we looked at for surfaces is actually a nice way of thinking about manifolds of any dimension. For instance, we can think of a one-dimensional curve as a map \(\gamma: I \rightarrow \mathbb{R}^3\) from a subset \(I = [0,T] \subset \mathbb{R}\) of the real line to \(\mathbb{R}^3\). Again the differential \(d\gamma\) tells us how tangent vectors get stretched out by \(\gamma\), and again the induced length of a tangent vector \(X\) is given by

\[ |d\gamma(X)| = \sqrt{d\gamma(X) \cdot d\gamma(X)}. \]

Working with curves is often easier if \(\gamma\) preserves length, i.e., if for every tangent vector \(X\) we have

\[ |d\gamma(X)| = |X|. \]

There are various names for such a parameterization (“unit speed”, “arc-length”, “isometric”) but the point is simply that the curve doesn’t get stretched out when we go from \(\mathbb{R}\) to \(\mathbb{R}^3\) — think of \(\gamma\) as a rubber band that is completely relaxed. This unit-speed view is also the right one for the discrete setting where we often have no notion of a base domain \(I\) — the curve is “born” in \(\mathbb{R}^3\) and all we can do is assume that it sits there in a relaxed state.

The Frenet Frame

Suppose we have a unit-speed curve \(\gamma\) and a unit vector \(\hat{X} \in \mathbb{R}\) oriented along the positive direction. Then

\[ T = d\gamma(\hat{X}) \]

is a unit vector in \(\mathbb{R}^3\) tangent to the curve. Carrying this idea one step further, we can look at the change in tangent direction as we move along \(\gamma\). Since \(T\) may change at any rate (or not at all!) we split up the change into two pieces:

\[ \kappa N = dT(\hat{X}). \]

The scalar \(\kappa \in \mathbb{R}\) is called the curvature and expresses the magnitude of change, while the vector \(N \in \mathbb{R}^3\) is called the principal normal and expresses the direction of change.

One thing to notice is that \(T\) and \(N\) are always orthogonal. Why? Simply because if \(T\) changed along the direction of \(T\) itself then it would no longer have unit length! Therefore one often defines a third vector \(B = T \times N\) called the binormal, which completes the orthonormal Frenet frame \((T,N,B)\) of \(\gamma\).

Finally, how does \(B\) change along \(\gamma\)? Here our story ends since the change in the binormal can be expressed in terms of the normal: \(dB(\hat{X}) = -\tau N\). The quantity \(\tau \in \mathbb{R}\) is called the torsion, and describes how much the Frenet frame “twists” around \(T\) as we travel along \(\gamma\).

Note that for a curve with torsion the normal \(N\) also twists around the tangent — in particular \(dN = -\kappa T + \tau B\). Altogether we get the Frenet-Serret formulas, which describe the motion of the Frenet frame:

dT &=& \kappa N \\
dN &=& -\kappa T + \tau B \\
dB &=& -\tau N

Since \(T\), \(N\), and \(B\) have unit length at each point, we can visualize them as curves on the unit sphere \(S^2 \subset \mathbb{R}^3\), just as we did with the Gauss map. In this context the sphere is often given a special name: the (tangent-, principal normal-, or binormal-) indicatrix. Later on we’ll see that this “indicatrix” picture has some beautiful geometric consequences.

Visualizing Curvature

Imagine that \(\gamma\) sits in the plane. At any given point there is a circle \(S\) called the osculating circle that best approximates \(\gamma\), meaning that it has the same tangent direction \(T\) and curvature vector \(\kappa N\). How do we know such a circle exists? Well, we can certainly find a point with tangent \(T\) on a circle of any radius. We can then adjust the size of \(S\) until it has the desired curvature. Alternatively, one can construct \(S\) by considering a circle passing through three consecutive points on \(\gamma\), which approaches the osculating circle \(S\) as the points move closer together. Since these points yield the same approximations of first- and second- derivatives along both \(\gamma\) and \(S\) (using finite differences), the tangents and curvatures of the two curves will agree as the points converge.

In any case, we can use the geometry of \(S\) to express the curvature of \(\gamma\). If \(S\) has radius \(r\) then it takes time \(2\pi r\) to go all the way around the circle at unit speed, and during this time the tangent turns around by an angle \(2\pi\). Of course, since \(T\) has unit length the instantaneous change in \(T\) is described exclusively by the change in angle. So we end up with \(\kappa = |\kappa N| = |dT(\hat{X})| = 2\pi/2\pi r = 1/r\): the curvature of a circle is simply the reciprocal of its radius. This fact should make some intuitive sense: if we watch a circle grow bigger and bigger from a fixed viewpoint, it eventually looks just like a straight line.

The radius and center of the osculating circle are often referred to as the radius of curvature and center of curvature, respectively. We can tell this same story for any curve in \(\mathbb{R}^3\) by considering the osculating plane \(T \times N\), since this plane contains both the tangent and the curvature vector.

For curves it makes little difference whether we consider the tilt of the tangent vector to find the curvature or the tilt of the (principal) normal vector since the two are related via a rotation by \(\pi/2\) in the osculating plane. For surfaces, however, it will make more sense to consider the change in normal vector, since we typically don’t have a distinguished tangent vector at any given point.

October 11, 2011 | Comments Closed

A Quick and Dirty Introduction to the Curvature of Surfaces

Let’s take a more in-depth look at the curvature of surfaces. The word “curvature” really corresponds to our everyday understanding of what it means for something to be curved: eggshells, donuts, and spiraling telephone cables have a lot of curvature; floors, ceilings, and cardboard boxes do not. But what about something like a beer bottle? Along one direction the bottle quickly curves around in a circle; along another direction it’s completely flat and travels along a straight line:

This way of looking at curvature — in terms of curves traveling along the surface — is often how we treat curvature in general. In particular, let \(X\) be a unit tangent direction at some distinguished point on the surface, and consider a plane containing both \(df(X)\) and the corresponding normal \(N\). This plane intersects the surface in a curve, and the curvature \(\kappa_n\) of this curve is called the normal curvature in the direction \(X\):

Remember the Frenet-Serret formulas? They tell us that the change in the normal along a curve is given by \(dN = -\kappa T + \tau B\). We can therefore get the normal curvature along \(X\) by extracting the tangential part of dN, and normalizing by any “stretching out” that occurs as we go from the domain \(M\) into \(\mathbb{R}^3\):

\[ \kappa_n(X) = \frac{-df(X) \cdot dN(X)}{|df(x)|^2}. \]

Note that normal curvature is signed, meaning the surface can bend toward the normal or away from it.

Principal, Mean, and Gaussian Curvature

At any given point we can ask: along which directions does the surface bend the most? The unit vectors \(X_1\) and \(X_2\) along which we find the maximum and minimum normal curvatures \(\kappa_1\) and \(\kappa_2\) are called the principal directions; the curvatures \(\kappa_i\) are called the principal curvatures. For instance, the beer bottle above might have principal curvatures \(\kappa_1 = 1\), \(\kappa_2 = 0\) at the marked point.

One important fact about the principal directions is that they are eigenvectors of the shape operator, in the sense that

\[ dN(X_i) = \kappa_i df(X_i). \]

(Moreover, the principal directions are orthogonal: \(df(X_1) \cdot df(X_2) = 0\) — see the appendix below for a proof.) The principal directions therefore tell us everything there is to know about the curvature at a point, since we can express any tangent vector \(Y\) in the basis \(\{X_1,X_2\}\) and easily compute the corresponding normal curvature. As we’ll discover, however, getting your hands directly on the principal curvatures is often quite difficult — especially in the discrete setting.

On the other hand, two closely related quantities — called the mean curvature and the Gaussian curvature will show up over and over again, and have some particularly nice interpretations in the discrete world. The mean curvature \(H\) is the arithmetic mean of principal curvatures:

\[ H = \frac{\kappa_1 + \kappa_2}{2}, \]

and the Gaussian curvature is the (square of the) geometric mean:

\[ K = \kappa_1 \kappa_2. \]

What should you visualize if someone tells you a surface has nonzero Gaussian or mean curvature? Perhaps the most elementary interpretation is that Gaussian curvature is like a logical “and” (is there curvature along both directions?) whereas mean curvature is more like a logical “or” (is there curvature along at least one direction?) Of course, you have to be a little careful here since you can also get zero mean curvature when \(\kappa_1 = -\kappa_2\).

It also helps to see pictures of surfaces with zero mean and Gaussian curvature. Zero-curvature surfaces are so thoroughly studied in mathematics that they even have special names. Surfaces with zero Gaussian curvature are called developable surfaces because they can be “developed” or flattened out into the plane without any stretching or tearing. For instance, any piece of a cylinder is developable since one of the principal curvatures is zero:

Surfaces with zero mean curvature are called minimal surfaces because (as we’ll see later) they minimize surface area (with respect to certain constraints). Minimal surfaces tend to be saddle-like since principal curvatures have equal magnitude but opposite sign:

The saddle is also a good example of a surface with negative Gaussian curvature. What does a surface with positive Gaussian curvature look like? The hemisphere is one example:

Note that in this case \(\kappa_1 = \kappa_2\) and so principal directions are not uniquely defined — maximum (and minimum) curvature is achieved along any direction \(X\). Any such point on a surface is called an umbilic point.

There are plenty of cute theorems and relationships involving curvature, but those are the basic facts: the curvature of a surface is completely characterized by the principal curvatures, which are the maximum and minimum normal curvatures. The Gaussian and mean curvature are simply averages of the two principal curvatures, but (as we’ll see) are often easier to get your hands on in practice.

October 12, 2011 | Comments Closed

Code for Next Assignment Posted

Code for the next assignment can be downloaded here:


We’ll provide more details about the actual assignment later this week (including the due date), but for now just try to see if you can get the code to compile.

Instructions on getting started can be found in the user guide — this precise sequence of steps may not work for you, but it should at least get you started. If you’re having trouble (or finding wild success!), feel free to gripe about it in the comments (below).

Finally, if you’ve never seen C++ before, don’t freak out — the path is pretty clearly laid out for you in the assignment.

A Quick and Dirty Introduction to Exterior Calculus — Part I: Vectors and 1-Forms

Many important concepts in differential geometry can be nicely expressed in the language of exterior calculus. Initially these concepts will look exactly like objects you know and love from vector calculus, and you may question the value of giving them funky new names. For instance, scalar fields are no longer called scalar fields, but are now called 0-forms! In many ways vector and exterior calculus are indeed “dual” to each-other, but it is precisely this duality that makes the language so expressive. In the long run we’ll see that exterior calculus also makes it easy to generalize certain ideas from vector calculus — the primary example being Stokes’ theorem. Actually, we already started using this language in our introduction to the geometry of surfaces, but here’s the full story.

Once upon a time there was a vector named \(v\):

What information does \(v\) encode? One way to inspect a vector is to determine its extent or length along a given direction. For instance, we can pick some arbitrary direction \(\alpha\) and record the length of the shadow cast by \(v\) along \(\alpha\):

The result is simply a number, which we can denote \(\alpha(v)\). The notation here is meant to emphasize the idea that \(\alpha\) is a function: in particular, it’s a linear function that eats a vector and produces a scalar. Any such function is called a 1-form (a.k.a. a covector or a cotangent).

Of course, it’s clear from the picture that the space of all 1-forms looks a lot like the space of all vectors: we just had to pick some direction to measure along. But often there is good reason to distinguish between vectors and 1-forms — the distinction is not unlike the one made between row vectors and column vectors in linear algebra. For instance, even though rows and column both represent “vectors,” we only permit ourselves to multiply rows with columns:

\[ \left[ \begin{array}{ccc} \alpha_1 & \cdots & \alpha_n \end{array} \right] \left[ \begin{array}{c} v_1 \\ \vdots \\ v_n \end{array} \right]. \]

If we wanted to multiply, say, two columns, we would first have to take the transpose of one of them to convert it into a row:

\[ v^T v = \left[ \begin{array}{ccc} v_1 & \cdots & v_n \end{array} \right] \left[ \begin{array}{c} v_1 \\ \vdots \\ v_n \end{array} \right]. \]

Same deal with vectors and 1-forms, except that now we have two different operations: sharp (\(\sharp\)), which converts a 1-form into a vector, and flat (\(\flat\)) which converts a vector into a 1-form. For instance, it’s perfectly valid to write \(v^\flat(v)\) or \(\alpha(\alpha^\sharp)\), since in either case we’re feeding a vector to a 1-form. The operations \(\sharp\) and \(\flat\) are called the musical isomorphisms.

All this fuss over 1-forms versus vectors (or even row versus column vectors) may seem like much ado about nothing. And indeed, in a flat space like the plane, the difference between the two is pretty superficial. In curved spaces, however, there’s an important distinction between vectors and 1-forms. For one thing, physical quantities “without mass” (like velocity and acceleration) are represented by vectors; quantities “with mass” (like momentum and force) are represented by 1-forms.

More generally we want to make sure that we’re taking “measurements” in the right space. For instance, suppose we want to measure the length of a vector \(v\) along the direction of another vector \(u\). It’s important to remember that tangent vectors get stretched out by the map \(f: \mathbb{R}^2 \supset M \rightarrow \mathbb{R}^3\) that takes us from the plane to some surface in \(\mathbb{R}^3\). Therefore, the operations \(\sharp\) and \(\flat\) should satisfy relationships like

\[ u^\flat(v) = g(u,v) \]

where \(g\) is the metric induced by \(f\). This way we’re really measuring how things behave in the “stretched out” space rather than the initial domain \(M\).


Until now we’ve intentionally avoided the use of coordinates — in other words, we’ve tried to express geometric relationships without reference to any particular coordinate system \(x_1, \ldots, x_n\). Why avoid coordinates? Several reasons are often cited (people will mumble something about “invariance”), but the real reason is quite simply that coordinate-free expressions tend to be shorter, sweeter, and easier to extract meaning from. This approach is also particularly valuable in geometry processing, because many coordinate-free expressions translate naturally to basic operations on meshes.

Yet coordinates are still quite valuable in a number of situations. Sometimes there’s a special coordinate basis that greatly simplifies analysis — recall our discussion of principal curvature directions, for instance. At other times there’s simply no obvious way to prove something without coordinates. For now we’re going to grind out a few basic facts about exterior calculus in coordinates; at the end of the day we’ll keep whatever nice coordinate-free expressions we find and politely forget that coordinates ever existed!

Let’s setup our coordinate system. For reasons that will become clear later, we’re going to use the symbols \(\frac{\partial}{\partial x^1}, \ldots, \frac{\partial}{\partial x^n}\) to represent an orthonormal basis for vectors in \(\mathbb{R}^n\), and use \(dx^i, \ldots, dx^n\) to denote the corresponding 1-form basis. In other words, any vector \(v\) can be written as a linear combination

\[ v = v^1 \frac{\partial}{\partial x^1} + \cdots + v^n \frac{\partial}{\partial x^n}, \]

and any 1-form can be written as a linear combination

\[ \alpha = \alpha_1 dx^1 + \cdots + \alpha_n dx^n. \]

To keep yourself sane at this point, you should completely ignore the fact that the symbols \(\frac{\partial}{\partial x^i}\) and \(dx^i\) look like derivatives — they’re simply collections of unit-length orthogonal bases, as depicted above. The two bases \(dx^i\) and \(\frac{\partial}{\partial x^i}\) are often referred to as dual bases, meaning they satisfy the relationship

\[ dx^i\left(\frac{\partial}{\partial x^j}\right) = \delta^i_j = \begin{cases} 1, & i = j \\ 0, & \mbox{otherwise.} \end{cases} \]

This relationship captures precisely the behavior we’re looking for: a vector \(\frac{\partial}{\partial x^i}\) “casts a shadow” on the 1-form \(dx^j\) only if the two bases point in the same direction. Using this relationship, we can work out that

\[ \alpha(v) = \sum_i \alpha_i dx^i\left( \sum_j v^j \frac{\partial}{\partial x^j} \right) = \sum_i \alpha_i v_i \]

i.e., the pairing of a vector and a 1-form looks just like the standard Euclidean inner product.


It’s worth saying a few words about notation. First, vectors and vector fields tend to be represented by letters from the end of the Roman alphabet (\(u\), \(v\), \(w\) or \(X\), \(Y\), \(Z\), repectively), whereas 1-forms are given lowercase letters from the beginning of the Greek alphabet (\(\alpha\), \(\beta\), \(\gamma\), etc.). Although one often makes a linguistic distinction between a “vector” (meaning a single arrow) and a “vector field” (meaning an arrow glued to every point of a space), there’s an unfortunate precedent to use the term “1-form” to refer to both ideas — sadly, nobody ever says “1-form field!” Scalar fields or 0-forms are often given letters from the middle of the Roman alphabet (\(f\), \(g\), \(h\)) or maybe lowercase Greek letters from somewhere in the middle (\(\phi\), \(\psi\), etc.).

You may also notice that we’ve been very particular about the placement of indices: coefficients \(v^i\) of vectors have indices up, coefficients \(\alpha_i\) of 1-forms have indices down. Similarly, vector bases \(\frac{\partial}{\partial x^i}\) have indices down (they’re in the denominator), and 1-form bases \(dx^i\) have indices up. The reason for being so neurotic is to take advantage of Einstein summation notation: any time a pair of variables is indexed by the same letter \(i\) in both the “up” and “down” position, we interpret this as a sum over all possible values of \(i\):

\[ \alpha_i v^i = \sum_i \alpha_i v^i. \]

The placement of indices also provides a cute mnemonic for the musical isomorphisms \(\sharp\) and \(\flat\). In musical notation \(\sharp\) indicates a half-step increase in pitch, corresponding to an upward movement on the staff. For instance, both notes below correspond to a “C” with the same pitch:

Therefore, to go from a 1-form to a vector we raise the indices. For instance, in a flat space we don’t have to worry about the metric and so a 1-form

\[ \alpha = \alpha_1 dx^1 + \cdots + \alpha_n dx^n \]

becomes a vector

\[ \alpha^\sharp = \alpha^1 \frac{\partial}{\partial x^1} + \cdots + \alpha^n \frac{\partial}{\partial x^n}. \]

Similarly, \(\flat\) indicates a decrease in pitch and a downward motion on the staff:

and so \(\flat\) lowers the indices of a vector to give us a 1-form — e.g.,

\[ v = v^1 \frac{\partial}{\partial x^1} + \cdots + v^n \frac{\partial}{\partial x^n}. \]


\[ v^\flat = v_1 dx^1 + \cdots + v_n dx^n. \]

October 21, 2011 | Comments Closed

A Quick and Dirty Introduction to Exterior Calculus — Part II: Differential Forms and the Wedge Product

In our last set of notes we measured the length of a vector by projecting it onto different coordinate axes; this measurement process effectively defined what we call a 1-form. But what happens if we have a collection of vectors? For instance, consider a pair of vectors \(u, v\) sitting in \(\mathbb{R}^3\):

We can think of these vectors as defining a parallelogram, and much like we did with a single vector we can measure this parallelogram by measuring the size of the “shadow” it casts on some plane:

For instance, suppose we represent this plane via a pair of unit orthogonal 1-forms \(\alpha\) and \(\beta\). Then the projected vectors have components

\[ \begin{array}{rcl}
u^\prime &=& (\alpha(u),\beta(u)), \\
v^\prime &=& (\alpha(v),\beta(v)),
\end{array} \]

hence the (signed) projected area is given by the cross product

\[ u^\prime \times v^\prime = \alpha(u)\beta(v) - \alpha(v)\beta(u). \]

Since we want to measure a lot of projected volumes in the future, we’ll give this operation the special name “\(\alpha \wedge \beta\)”:

\[ \alpha \wedge \beta(u,v) := \alpha(u)\beta(v) - \alpha(v)\beta(u). \]

As you may have already guessed, \(\alpha \wedge \beta\) is what we call a 2-form. Ultimately we’ll interpret the symbol \(\wedge\) (pronounced “wedge”) as a binary operation on differential forms called the wedge product. Algebraic properties of the wedge product follow directly from the way signed volumes behave. For instance, notice that if we reverse the order of our axes \(\alpha, \beta\) the sign of the area changes. In other words, the wedge product is antisymmetric:

\[ \alpha \wedge \beta = -\beta \wedge \alpha. \]

An important consequence of antisymmetry is that the wedge of any 1-form with itself is zero:

\[ \begin{array}{c}
\alpha \wedge \alpha = -\alpha \wedge \alpha \\
\Rightarrow \alpha \wedge \alpha = 0.
\end{array} \]

But don’t let this statement become a purely algebraic fact! Geometrically, why should the wedge of two 1-forms be zero? Quite simply because it represents projection onto a plane of zero area! (I.e., the plane spanned by \(\alpha\) and \(\alpha\).)

Next, consider the projection onto two different planes spanned by \(\alpha, \beta\) and \(\alpha, \gamma\). The sum of the projected areas can be written as

\alpha \wedge \beta(u,v) + \alpha \wedge \gamma(u,v)
&=& \alpha(u)\beta(v) - \alpha(v)\beta(u) + \alpha(u)\gamma(v) - \alpha(v)\gamma(u) \\
&=& \alpha(u)(\beta(v) + \gamma(v)) - \alpha(v)(\beta(u) + \gamma(u)) \\
&=:& (\alpha \wedge (\beta + \gamma))(u,v),

or in other words \(\wedge\) distributes over \(+\):

\[ \alpha \wedge (\beta + \gamma) = \alpha \wedge \beta + \alpha \wedge \gamma. \]

Finally, consider three vectors \(u, v, w\) that span a volume in \(\mathbb{R}^3\):

We’d like to consider the projection of this volume onto the volume spanned by three 1-forms \(\alpha\), \(\beta\), and \(\gamma\), but the projection of one volume onto another is a bit difficult to visualize! For now you can just cheat and imagine that \(\alpha = dx^1\), \(\beta = dx^2\), and \(\gamma = dx^3\) so that the mental picture for the projected volume looks just like the volume depicted above. One way to write the projected volume is as the determinant of the projected vectors \(u^\prime\), \(v^\prime\), and \(w^\prime\):

\[ \alpha \wedge \beta \wedge \gamma( u, v, w ) := \mathrm{det}\left(\left[ \begin{array}{ccc} u^\prime & v^\prime & w^\prime \end{array} \right]\right) = \mathrm{det}\left( \left[ \begin{array}{ccc} \alpha(u) & \alpha(v) & \alpha(w) \\ \beta(u) & \beta(v) & \beta(w) \\ \gamma(u) & \gamma(v) & \gamma(w) \end{array} \right] \right). \]

(Did you notice that the determinant of the upper-left 2×2 submatrix also gives us the wedge product of two 1-forms?) Alternatively, we could express the volume as the area of one of the faces times the length of the remaining edge:

Thinking about things this way, we might come up with an alternative definition of the wedge product in terms of the triple product:

\alpha \wedge \beta \wedge \gamma( u, v, w ) &=& (u^\prime \times v^\prime) \cdot w^\prime \\
&=& (v^\prime \times w^\prime) \cdot u^\prime \\
&=& (w^\prime \times u^\prime) \cdot v^\prime \\

The important thing to notice here is that order is not important — we always get the same volume, regardless of which face we pick (though we still have to be a bit careful about sign). A more algebraic way of saying this is that the wedge product is associative:

\[ (\alpha \wedge \beta) \wedge \gamma = \alpha \wedge (\beta \wedge \gamma). \]

In summary, the wedge product of \(k\) 1-forms gives us a \(k\)-form, which measures the projected volume of a collection of \(k\) vectors. As a result, the wedge product has the following properties for any \(k\)-form \(\alpha\), \(l\)-form \(\beta\), and \(m\)-form \(\gamma\):

  • Antisymmetry: \(\alpha \wedge \beta = (-1)^{kl}\beta \wedge \alpha\)
  • Associativity: \(\alpha \wedge (\beta \wedge \gamma) = (\alpha \wedge \beta) \wedge \gamma\)
and in the case where \(l=m\) we have
  • Distributivity: \(\alpha \wedge (\beta + \gamma) = \alpha \wedge \beta + \alpha \wedge \gamma\)

A separate fact is that a \(k\)-form is antisymmetric in its arguments — in other words, swapping the relative order of two “input” vectors changes only the sign of the volume. For instance, if \(\alpha\) is a 2-form then \(\alpha(u,v) = -\alpha(v,u)\). In general, an even number of swaps will preserve the sign; an odd number of swaps will negate it. (One way to convince yourself is to consider what happens to the determinant of a matrix when you exchange two of its columns.) Finally, you’ll often hear people say that \(k\)-forms are “multilinear” — all this means is that if you keep all but one of the vectors fixed, then a \(k\)-form looks like a linear map. Geometrically this makes sense: \(k\)-forms are built up from \(k\) linear measurements of length (essentially just \(k\) different dot products).

Vector-Valued Forms

Up to this point we’ve considered only real-valued \(k\)-forms — for instance, \(\alpha(u)\) represents the length of the vector \(u\) along the direction \(\alpha\), which can be expressed as a single real number. In general, however, a \(k\)-form can “spit out” all kinds of different values. For instance, we might want to deal with quantities that are described by complex numbers (\(\mathbb{C}\)) or vectors in some larger vector space (e.g., \(\mathbb{R}^n\)).

A good example of a vector-valued \(k\)-form is our map \(f: M \rightarrow \mathbb{R}^3\) which represents the geometry of a surface. In the language of exterior calculus, \(f\) is an \(\mathbb{R}^3\)-valued 0-form: at each point \(p\) of \(M\), it takes zero vectors as input and produces a point \(f(p)\) in \(\mathbb{R}^3\) as output. Similarly, the differential \(df\) is an \(\mathbb{R}^3\)-valued 1-form: it takes one vector (some direction \(u\) in the plane) and maps it to a value \(df(u)\) in \(\mathbb{R}^3\) (representing the “stretched out” version of \(u\)).

More generally, if \(E\) is a vector space then an \(E\)-valued \(k\)-form takes \(k\) vectors to a single value in \(E\). However, we have to be a bit careful here. For instance, think about our definition of a 2-form:

\[ \alpha \wedge \beta(u,v) := \alpha(u)\beta(v) - \alpha(v)\beta(u). \]

If \(\alpha\) and \(\beta\) are both \(E\)-valued 1-forms, then \(\alpha(u)\) and \(\beta(v)\) are both vectors in \(E\). But how do you multiply two vectors? In general there may be no good answer: not every vector space comes with a natural notion of multiplication.

However, there are plenty of spaces that do come with a well-defined product — for instance, the product of two complex numbers \(a + bi\) and \(c+di\) is given by \((ac-bd)+(ad+bc)i\), so we have no trouble explicitly evaluating the expression above. In other cases we simply have to say which product we want to use — in \(\mathbb{R}^3\) for instance we could use the cross product \(\times\), in which case an \(\mathbb{R}^3\)-valued 2-form looks like this:

\[ \alpha \wedge \beta(u,v) := \alpha(u) \times \beta(v) - \alpha(v) \times \beta(u). \]