CHAPTER 12 Transformations in 3D There are no built-in routines for 3D drawing in PostScript. For this purpose we shall have to use a library of PostScript procedures designed especially for the task, as an extension to basic PostScript. In this chapter we shall look at some of the mathematics behind such a library, which is much more complicated than that required in 2D. We shall examine principally rigid transformations, those which affect an object without distorting it, but then at the end look at something related to shadow projections. The importance of rigid transformations is especially great because in order to build an illusion of 3D through 2D images the illusion of motion helps a lot. One point is that motion leads to an illusion of depth through size change, and another is that it allows one to see an object from different sides. The motions used will be mostly rotations and translations, those which occur most commonly in the real world. There are several reasons why it is a good idea to examine such transformations in dimensions one and two as well as three. 12.1. Rigid transformations If we move an object around normally, it will not visibly distort—that is to say, to all appearances it will remain rigid. The points of the object themselves will move around, but the relative distances between points of the object will not change. We can formulate this notion more precisely. Suppose we move an object from one position to another. In this process, a point P will be moved to another point P∗ . We shall say that the points of the object are transformed into other points. A transformation is said to be rigid if it preserves relative distances—that is to say, if P and Q are transformed to P∗ and Q∗ then the distance from P∗ to Q∗ is the same as that from P to Q. We shall take for granted something that can actually be proven, but by a somewhat distracting argument: • A rigid transformation is affine. This means that if we have chosen a linear coordinate system in whatever context we are looking at (a line, a plane, or space). then the transformation P 7→ P∗ is calculated in terms of coordinate arrays x and x∗ according to the formula x∗ = xA + v where A is a matrix and v a vector. Another way of saying this is that first we apply a linear transformation whose matrix is A, then a translation by v . In 3D, for example, we require that [ x∗ y∗ z∗ ] = [ x y z ] A + [ vx vy vz ] . The matrix A is called the linear component, v the translation component of the transformation. It is clear that what we would intuitively call a rigid transformation preserves relative distances, but it might not be so clear that this requirement encapsulates rigidity completely. The following assertion may add conviction: Chapter 12. Transformations in 3D 2 • A rigid transformation (in the sense I have defined it) preserves angles as well as distances. That is to say, if P , Q and R are three points transformed to P∗ , Q∗ , and R∗ , then the angle θ∗ between segments P∗ Q∗ and P∗ R∗ is the same as the angle θ between P Q and P R. This is because of the cosine law, which says that kQ∗ R∗ k2 − kP∗ Q∗ k2 − kP∗ R∗ k2 cos θ∗ = kP∗ Q∗ k kP∗ R∗ k kQRk2 − kP Qk2 − kP Rk2 = kP Qk kP Rk = cos θ . A few other facts are more elementary: • A transformation obtained by performing one rigid transformation followed by another rigid transformation is itself rigid. • The inverse of a rigid transformations is rigid. In the second statement, it is implicit that a rigid transformation has an inverse. This is easy to see. First of all, any affine transformation will be invertible if and only if its linear component is. But if a linear transformation does not have an inverse, then it must collapse at least one non-zero vector into the zero vector, and it cannot be rigid. Exercise 12.1. Recall exactly why it is that a square matrix with determinant equal to zero must transform at least one non-zero vector into zero. An affine transformation is rigid if and only if its linear component is, since translation certainly doesn’t affect relative distances. In order to classify rigid transformations, we must thus classify the linear ones. We’ll do that in a later section, after some coordinate calculations. Exercise 12.2. The inverse of the transformation x 7→ Ax + v is also affine. What are its linear and translation components? 12.2. Dot and cross products In this section I’ll recall some basic facts about vector algebra. • Dot products In any dimension the dot product of two vectors u = (x1 , x2 . . . , xn ), v = (y1 , y2 , . . . , yn ) is defined to be u • v = x1 y1 + x2 y2 + · · · xn yn . The relation between dot products and geometry is expressed by the cosine rule for triangles, which asserts that if θ is the angle between u and v then cos θ = In particular u and v are perpendicular when u • v = 0. u•v . kuk kvk Chapter 12. Transformations in 3D 3 • Parallel projection One important use of dot products and cross products will be in calculating various projections. Suppose α to be any vector in space and u some other vector in space. The projection of u along α is the vector u0 we get by projecting u perpendicularly onto the line through α. α u0 u u⊥ How to calculate this projection? It must be a multiple of α. We can figure out which multiple by using trigonometry. We know three facts: (a) The angle θ between α and u is determined by the formula cos θ = u•α . kαk kuk (b) The length of the vector u0 is kuk cos θ, and this is to be interpreted algebraically in the sense that if u 0 faces in the direction opposite to α it is negative. (c) Its direction is either the same or opposite to α. The vector α/kαk is a vector of unit length pointing in the same direction as α. Therefore u0 = kuk cos θ α u•α α = kuk = kαk kαk kuk kαk  u•α kαk2  α= u•α α•α α. • Volumes The basic result about volumes is that in any dimension n, the signed volume of the parallelopiped spanned by vectors v1 , v2 , . . . , vn is the determinant of the matrix  v1  v2    ... vn  whose rows are the vectors vi . Let me illustrate this in dimension 2. First of all, what do I mean by the signed volume? A pair of vectors u and v in 2D determine not only a parallelogram but an orientation, a sign. The sign is positive if u is rotated in a positive direction through the parallelogram to reach v , and negative in the other case. If u and v happen to lie on the same line, then the parallelogram is degenerate, and the sign is 0. The signed area of the parallelogram they span is this sign multiplied by the area of the parallelogram itself. Thus in the figure on the left the sign is positive while on the right it is negative. Notice that the sign depends on the order in which we list u and v . Chapter 12. Transformations in 3D 4 v u u v (u, v) oriented + (u, v) oriented − I’ll offer two proofs of the fact that in 2D the signed area of the parallelogram spanned by two vectors u and v is the determinant of the matrix whose rows are u and v . The first is the simplest, but it has the drawback that it does not extend to higher dimensions, although it does play an important role. In the first argument, recall that u ⊥ is the vector obtained from u by rotating it positively through 90 ◦ . If u = [x, y] then u⊥ = [−y, x]. As the following figure illustrates, the signed area of the paralleogram spanned by u and v is the product of kuk and the signed length of the projection of v onto the line through u ⊥ . v v0 u Thus the area is  [−uy , ux ] • [vx , vy ] kuk  kuk = ux vy − uy vx = det  ux uy vx vy  = ux vx uy vy . The starting observation of the second argument is that shearing one of the rows of the matrix changes neither the determinant nor the area. For the area, this is because shears don’t change area, while for the determinant it is a simple calculation: x1 + cx2 x2 y1 + cy2 x y = 1 1 . y2 x2 y2 Thus in each of the transitions below, neither the determinant nor the area changes. Since they agree in the final figure, where the matrix is a diagonal matrix, they must agree in the first. There are exceptional circumstances in which one has to be a bit fussy, but this is nonetheless the core of a valid proof that in dimension two determinants and area agree. It is still, with a little care, valid in dimension three. It is closely related to the Gauss elimination process. Chapter 12. Transformations in 3D 5 Exercise 12.3. Suppose A to be the matrix whose rows are the vectors v 1 and v2 . The argument above means that for most A we can write    1 1 c1 A=D c2 1 1 where D is a diagonal matrix. Prove this, being careful about exceptions. For which A in 2D does it fail? Provide an explicit example of an A for which it fails. Show that even for such A (in 2D) the equality of determinant and area remains true. In n dimensions, the Gaussian elimination process finds for any matrix A a permutation matrix w, a lower triangular matrix ℓ, and an upper triangulation matrix u such that A = ℓuw . The second argument in 2D shows that the the claim is reduced to the special case of a permutation matrix, in which case it is clear. • Cross products In 3D—and essentially only in 3D—there is a kind of product that multiplies two vectors to get another vector. If u = (x1 , x2 , x3 ), v = (y1 , y2 , y3 ) then their cross product u × v is the vector (x2 y3 − y2 x3 , x3 y1 − x1 y3 , x1 y2 − x2 y1 ) . This formula can be remembered if we write the vectors u and v in a 2 × 3 matrix  x1 y1 x2 x3 y2 y3  and then for each column of this matrix calculate the determinant of the 2 × 2 matrix we get by crossing out in turn each of the columns. The only tricky part is that with the middle coefficient we must reverse sign. Thus u×v =  x2 y2 x3 x x3 x x2 ,− 1 , 1 y3 y1 y3 y1 y2  . It makes a difference in which order we write the terms in the cross product. More precisely u × v = −v × u . Recall that a vector is completely determined by its direction and its magnitude. The geometrical significance of the cross product is therefore contained in these two rules, which specify the cross product of two vectors uniquely. Chapter 12. Transformations in 3D 6 • The length of w = u × v is the area of the parallelogram spanned in space by u and v . • The vector w lies in the line perpendicular to the plane containing u and v and its direction is determined by the right hand rule—curl the fingers so as to go from u to v and the cross-product will lie along your thumb. u×v v u The cross product u × v will vanish only when the area of this parallelogram vanishes, or when u and v lie in a single line. Equivalently, when they are multiples of one another. That the length of the cross-product is equal to the area of the parallelogram is a variant of Pythagoras’ Theorem applied to areas—it says precisely that the square of the area of a parallelogram is equal to the sum of the squares of the areas of its projections onto the coordinate planes. I do not know a really simple way to see that it is true, however. The simplest argument I know of is to start with the determinant formula for volume. If u, v , and w are three vectors, then on the one hand the volume of the parallelopiped they span is the determinant of the matrix   u v w which can be written as the dot product of u and v × w, while on the other this volume is the product of the projection of u onto the line perpendicular to the plane spanned by v and w and the area of the parallelogram spanned by v and w. A similar formula is valid in all dimensions, where it becomes part of the theory of exterior products of vector spaces, a topic beyond the scope of this book. • Perpendicular projection Now let u⊥ be the projection of u onto the plane perpendicular to α. The vector u has the orthogonal decomposition u = u 0 + u⊥ and therefore we can calculate u⊥ = u − u 0 . Incidentally, in all of this discussion it is only the direction of α that plays a role. It is often useful to normalize α right at the beginning of these calculations, that is to say replace α by α/kαk. Any good collection of PostScript procedures for 3D drawing will contain ones to calculate dot products, cross products, u0 and u⊥ . Chapter 12. Transformations in 3D 7 12.3. Linear transformations and matrices It is time to recall the precise relationship between linear transformations and matrices. The link is the notion of frames. A frame in any number of dimensions d is a set of d linearly independent vectors of dimension d. Thus a frame in 1D is just a single non-zero vector. A frame in 2D is a pair of vectors whose directions do not lie in a single line. A frame in 3D is a set of three vectors not all lying in the same plane. A frame in dimension d determines a coordinate system of dimension d, and vice-versa. If the frame is made up of e1 , . . . , ed then every other vector x of dimension d can be expressed as a linear combination x = x1 e1 + · · · + xd ed and the coefficients xi are its coordinates with respect to that basis. They give rise to the representation of x as a row array [x1 . . . xd ] . Conversely, given a coordinate system the vectors e1 = [1, 0, . . . , 0], . . . , ed = [0, 0, . . . , 1] are the frame giving rise to it. I emphasize: • A vector is a geometric entity with intrinsic significance, for example the relative position of two points. Or, if a unit of length has been chosen, something with direction and magnitude. In the presence of a frame, and only in the presence of a frame, it can be assigned coordinates. In other words, the vector is, if you will, an arrow and it can be assigned coordinates only with respect to a given frame. Change the frame, change the coordinates. In a context where lengths are important, one usually works with orthonormal frames, those made up of a set of vectors ei with each ei of length 1 and distinct ei and ej perpendicular to each other: 1 if i = j 0 otherwise. In the presence of any frame, vectors may be assigned coordinates. If the frame is orthonormal, the coordinates of a vector are given simply: X v= ci ei , ci = ei • v . ei • ej = n If a particular point is fixed as origin, an arbitrary point may be assigned coordinates as well, namely those of the vector by which the origin is displaced to reach that point. Another geometric object is a linear function. A linear function ℓ assigns to very vector a number, with the property, called linearity, that ℓ(au + bv) = aℓ(u) + bℓ(v) . A linear function ℓ may also be assigned coordinates, namely the coefficients ℓi in its expression in terms of coordinates: ℓ(x) = ℓ1 x1 + · · · + ℓd xd . A linear function is represented as a column array  Then ℓ(x) is the matrix product  ℓ1 ... . ℓd   ℓ1 [x1 . . . xd ]  . . .  . ℓd Another point to emphasize: Chapter 12. Transformations in 3D 8 • A linear function is a geometric entity with intrinsic significance, which assigns a number to any vector. In the presence of a frame, and only in the presence of a frame, it can be assigned coordinates, the coefficients of its expression with respect to the coordinates of vectors. In physics, what I call vectors are called contravariant vectors and linear functions are called covariant ones. There is often some confusion about these notions, because often one has at hand an orthonormal frame and a notion of length, and given those each vector u determines a linear function f u : fu (v) = u • v . A linear transformation T assigns vectors to vectors, also with a property of linearity. In the presence of a coordinate system it, too, may be assigned coordinates, the array of coefficients ti,j such that (xT )j = d X xi ti,j . i=1 For example, in 2D we have xT = [x1  t x2 ] 1,1 t2,1 t1,2 t2,2  . The rectangular array ti,j is called the of a linear matrix assigned to T in the presence of the coordinate system. In particular, the i-th row of the matrix is the coordinate array of the image of the frame element e i with respect to T . For example,   t1,1 t2,1 [1 0] [0 1]  t1,1 t2,1 t1,2 t2,2 t1,2 t2,2 = [t1,1 t1,2 ]  = [t2,1 t2,2 ] . A final point, then, to emphasize: • A linear transformation is a geometric entity with intrinsic significance, transforming a vector into another vector. In the presence of a coordinate system (i.e. a frame), and only in the presence of a coordinate system, it can be assigned a matrix. In summary, it is important to distinguish between intrinsic properties of a geometric object and properties of its coordinates. If A is any square matrix, one can calculate its determinant. It is perhaps surprising to know that this has intrinsic significance. • Suppose T to be a linear transformation in dimension d and A the matrix associated to T with respect to some coordinate system. The determinant of A is the factor by which T scales all d-dimensional volumes. This explains why, for example, the determinant of a matrix product AB is just the same as det(A) det(B). If A changes volumes by a factor det(A) and B by the factor det(B) then the composite changes them by the factor det(A) det(B). If this determinant is 0, for example, it means that T is degenerate: it collapses d-dimensional objects down to something of lower dimension. What is the significance of the sign of the determinant? Let’s look at an example, where T amounts to 2D reflection in the y -axis. This takes (1, 0) to (−1, 0) and (0, 1) to itself, so the matrix is  −1 1  , Chapter 12. Transformations in 3D 9 which has determinant −1. Here is its effect on a familiar shape: R R Now the transformed letter R is qualitatively different from the original—there is no continuous way to deform one into the other without some kind of one-dimensional degeneration. In effect, reflection in the y -axis changes orientation in the plane. This is always the case: • A linear transformation with negative determinant changes orientation. 12.4. Changing coordinate systems Vectors, linear functions, linear transformations all acquire coordinates in the presence of a frame. What happens if we change frames? The first question to be answered is, how can we describe the relationship between two frames? The answer is, by a matrix. To see how this works, let’s look at the 2D case first. Suppose e1 , e2 and f1 , f2 are two frames in 2D. Make up column matrices E and F whose entries are vectors instead of numbers, vectors chosen from the frames:     e1 , e2 e= We can write f1 f2 f= . f1 = f1,1 e1 + f1,2 e2 f2 = f2,1 e1 + f2,2 e2 and it seems natural to define the 2 × 2 matrix Tfe =  f1,1 f2,1 f1,2 f2,2  . Then f = Tfe e , so the matrix Tfe relates the two frames. This use of a matrix, relating two different coordinate systems, is conceptually quite different from that in which it describes a linear transformation. In general, suppose e and f are two frames. Each of them is a set of d vectors. Let Tfe be the matrix whose i-th row is the array of coordinates of fi with respect to e. We can write this relationship in an equation f = Tfe e. This may seem a bit cryptic. In this equation, we think of the frames e and f themselves as column matrices  e1 e = ..., ed   f1 f = ... fd  whose entries are vectors, not numbers. One odd thing to keep in mind is that when we apply a matrix to a vector we write the matrix on the right, but when we apply it to a frame we put it on the left. Now suppose x to be a vector whose array of coordinates with respect to e is xe . We can write this relationship as   e1 x = xe e = [x1 . . . xd ]  . . .  , ed again expressing the frame as a column of vectors. Chapter 12. Transformations in 3D 10 With respect to the frame f we can write x = xf f . We want to know how to compute xe in terms of xf and vice-versa. But we can write x = xf f = xf (Tfe e) = (xf Tfe )e = xe e which implies: • If e and f are two frames with f = Tfe e then for any vector x xe = xf Tfe . A similar result is this: • If e and f are two frames with f = Tfe e then for any linear function ℓ ℓe = (Tfe )−1 ℓf . This is what has to happen, since the function evaluation xf ℓf = xe ℓe = xe Tfe ℓe , is intrinsic. Finally, we deal with linear transformations. We get from the first frame e a matrix Ae associated to A, and from the second a matrix Af . What is the relationship between the matrices Ae and Af ? We start out by recalling that the meaning of Ae can be encapsulated in the formula (xA)e = xe Ae for any vector x. In other words, the matrix Ae calculates the coordinates of xA with respect to the frame e. Similarly (xA)f = xf Af and then we deduce xe Ae = (xA)e = (xA)f Tfe = (xf Af )Afe = xf (Af Tfe ) = (xe (Tfe )−1 )Af Tfe = xe ((Tfe )−1 Af Tfe ) . Hence • If e and f are two frames with f = Tfe e then for any linear transformation T Te = (Tfe )−1 Af Tfe . This is an extremely important formula. For example, it allows us to see immediately that the determinant of a linear transformation, which is defined in terms of a matrix associated to it, is independent of the coordinate system which gives rise to the matrix. That’s because Ae = (Tfe )−1 Af Tfe , det(Ae ) = det((Tfe )−1 Af Tfe ) = det((Tfe )−1 ) det(Af ) det(Tfe ) = det(Af ) . Two matrices A and T −1 AT are said to be similar. They are actually equivalent, in the sense that they are the matrices of the same linear transformation, but with respect to different coordinate systems. Chapter 12. Transformations in 3D 11 12.5. Rigid linear transformations Let A be an d × d matrix, representing a rigid linear transformation T with respect to the frame e. a1,1  a2,1 A=  a1,2 a2,2 ad,1 ad,2  . . . a1,d . . . a2,d   . ... . . . ad,d Then ei A is equal to the i-th row of A. Therefore the length of the i-th row of A is also 1. The angle between e i and ej is 90◦ if i 6= j , and therefore the angle between the i-th and j -th rows of A is also 90◦ , and the two rows must be perpendicular to each other. In other words, the rows of A must be an orthogonal frame. In fact: • A linear transformation is rigid precisely when its rows make up an orthogonal frame. Any such matrix A is said to be orthogonal. The transpose tA of a matrix A has as its rows the columns of A, and vice-versa. By definition of the matrix product A tA, its entries are the various dot products of the rows of A with the columns of tA. Therefore: • A matrix A is orthogonal if and only if A tA = I , or equivalently if and only if its transpose is the same as as its inverse. If A and B are two n × n matrices, then det(AB) = det(A) det(B) . The determinant of A is the same as that of its transpose. If A is an orthogonal matrix, then det(I) = det(A) det(tA) = det(A)2 so that: • The determinant of an orthogonal matrix is ±1. If det(A) = 1, A preserves orientation, otherwise it reverses orientation. As we have already seen, there is a serious qualitative difference between the two types. If we start with an object in one position and move it continuously, then the transformation describing its motion will be a continuous family of rigid transformations. The linear component at the beginning is the identity matrix, with determinant 1. Since the family varies continuously, the linear component can never change the sign of its determinant, and must therefore always be orientation preserving. A way to change orientation would be to reflect the object, as if in a mirror. 12.6. Orthogonal transformations in 2D In 2D the classification of orthogonal transformations is very simple. First of all, we can rotate an object through some angle θ (possibly 0◦ ). θ Chapter 12. Transformations in 3D 12 This preserves orientation. The matrix of this transformation is, as we saw much earlier,  cos θ sin θ − sin θ cos θ  . Second, we can reflect things in an arbitrary line. That is to say, given a line ℓ, we can transform points on ℓ into themselves, points in the line through the origin perpendicular to ℓ into their negatives. This reverses orientation. Exercise 12.4. If ℓ is the line at angle θ with respect to the positive x-axis, what is the matrix of this reflection? It turns out there are no more possibilities. • Every linear rigid transformation in 2D is either a rotation or a reflection. Let e1 = [1, 0], e2 = [0, 1], and let T be a linear rigid transformation. Since e1 and e2 both have length 1, both T e 1 and T e1 also have length 1. All of these lie on the unit circle. Since the angle between e 1 and e2 is 90◦ , so is that between T e 1 and T e2 . There are two distinct possibilities, however. Either we rotate in the positive direction from T e1 to T e2 , or in the negative direction. T e2 e2 e2 T e1 T e1 e1 e1 T e2 In the first case, we obtain T e1 and T e2 from e1 and e2 by a rotation. In the second case, something more complicated is going on. Here, as we move a vector u from e 1 towards e2 and all the way around again to e1 , T u moves along the arc from T e1 to T e2 all the way around again to T e1 , and in the opposite direction. Now if we start with two points anywhere on the unit circle and move them around in opposite directions, sooner or later they will meet. At that point we have T u = u. Since T fixes u it fixes the line through u, hence takes points on the line through the origin perpendicular to it into itself. It cannot fix the points on that line, so it must negate them. In other words, T amounts to reflection in the line through u. Exercise 12.5. Explain why we can take u to be either of the points half way between e 1 and T e1 . Exercise 12.6. Find a formula for the reflection of v in the line through u. Chapter 12. Transformations in 3D 13 12.7. Orthogonal transformations in 3D There is one natural way to construct rigid linear motions in 3D. Choose an axis, and choose on it a direction. Equivalently choose a unit vector u, and the axis to be the line through u with direction that of u. α Choose an angle θ. Rotate things around the axis through angle θ, in the positive direction as seen along the axis from the positive direction. This is called a axial rotation. α The motion can in some sense be decomposed into two parts. The plane through the origin perpendicular to he axis is rotated into itself, and points on the axis remain fixed. Therefore the height of a point above the plane remains constant, and the projection of the motion onto this plane is just an ordinary 2D rotation. Chapter 12. Transformations in 3D 14 • Every orientation-preserving linear rigid transformation in 3D is an axial rotation. I’ll show this in one way here, and in a slightly different way later on. Recall that an eigenvector v for a linear transformation T is a non-zero vector v taken into a multiple of itself by T: T v = cv for some constant c, which is called the associated eigenvalue. This equation can be rewritten T v = cv = (T − cI)v = 0 . If T − cI were invertible, then we would deduce from this that v = (T − cI)−1 0 = 0 which contradicts the assumption that v 6= 0. Therefore T − cI is not invertible, and det(T − cI) = 0. In other words, c is a root of the characteristic polynomial det(A − xI) where A is a matrix representing T and x is a variable. For a 3 × 3 matrix   a1,1 − x a1,2 a1,3 A − xI =  a2,1 a2,2 − x a2,3  a3,1 a3,2 a3,3 − x and the characteristic polynomial is a cubic polynomial which starts out −x3 + · · · . For x < 0 and |x| large, this expression is positive, and for x > 0 and |x| large it is negative. It must cross the x-axis somewhere, which means that it must have at least one real root. Therefore A has at least one real eigenvalue. In 2D this reasoning fails—there may be two conjugate complex eigenvalues instead. Let c be a real eigenvalue of T , v a corresponding eigenvector. Since T is a rigid transformation, kT vk = kvk, or kcvk = kvk. Since kcvk = |c|kvk and kvk 6= 0, |c| = 1 and c = ±1. If c = 1, then we have a vector fixed by T . Since T preserves angles, it takes all vectors in the plane through the origin perpendicular to v into itself. Since T reserves orientation and T v = v , the restriction of T on this plane also preserves orientation. Therefore T rotates vectors in this plane, and must be a rotation around the axis through v . If c = −1, then we have T v = −v . The transformation T still takes the complementary plane into itself. Since T preserves orientation in 3D but reverses orientation on the line through v , T reverses orientation on this plane. But then T must be a reflection on this plane, according to the results of the previous section. We can find u such that T u = u, and w perpendicular to u and v such that T w = −w. In this case, T is rotation through 180 ◦ around the axis through u. Chapter 12. Transformations in 3D 15 12.8. Calculating the effect of an axial rotation To begin this section, I remark again that to determine an axial rotation we must specify not only an axis and an angle but a direction on the axis. This is because the sign of a rotation in 3D is only determined if we know whether it is assigned by a left hand or right hand rule. At any rate choosing a vector along an axis fixes a direction on it. Given a direction on an axis I’ll adopt the convention that the direction of positive rotation follows the right hand rule. So now the question we want to answer is this: Given a vector α 6= 0 and an angle θ. If u is any vector in space and we rotate u around the axis through α by θ, what new point v do we get? This is one of the basic calculations we will make to draw moved or moving objects in 3D. There are some cases which are simple. If u lies on the axis, it is fixed by the rotation. If it lies on the plane perpendicular to α it is rotated by θ in that plane (with the direction of positive rotation determined by the right hand rule). If u is an arbitrary vector, we express it as a sum of two vectors, one along the axis and one perpendicular to it, and then use linearity to find the effect of the rotation on it. To be precise, let R be the rotation we are considering. Given u we can find its projection onto the axis along α to be  •  u0 = α u α•α α Let u⊥ be the projection of u perpendicular to α. It is equal to u − u 0 . We write u = u 0 + u⊥ Ru = Ru0 + Ru⊥ = u0 + Ru⊥ . How can we find Ru⊥ ? Normalize α so kαk = 1, in effect replacing α by α/kαk. This normalized vector has the same direction and axis as α. The vector u∗ = α × u⊥ will then be perpendicular to both α and to u⊥ and will have the same length as u⊥ . The plane perpendicular to α is spanned by u⊥ and u∗ , which are perpendicular to each other and have the same length. The rotation R acts as a 2D rotation in the plane perpendicular to α, so: • The rotation by θ takes u⊥ to Ru⊥ = (cos θ) u⊥ + (sin θ) u∗ . In summary: (1) Normalize α, replacing α by α/kαk. (2) Calculate u0 = (3) Calculate α•u α•α α = (α • u) α . u⊥ = u − u 0 . (4) Calculate u∗ = α × u ⊥ . (5) Finally set Ru = u0 + (cos θ) u⊥ + (sin θ) u∗ . Exercise 12.7. What do we get if we rotate the vector (1, 0, 0) around the axis through (1, 1, 0) by 36 ◦ ? Exercise 12.8. Write a PostScript procedure with α and θ as arguments that returns the matrix associated to rotation by θ around α. Chapter 12. Transformations in 3D 16 12.9. Finding the axis and angle If we are given a matrix R which we know to be orthogonal and with determinant 1, how do we find its axis and rotation angle? As we have seen, it is a special case of the problem of finding eigenvalues and eigenvectors. But the situation is rather special, and can be done in a more elementary manner. In stages: (1) How do we find its axis? If ei is the i-th standard basis vector (one of i, j, or k) the i-th column of R is Rei . Now for any vector u the difference Ru − u is perpendicular to the rotation axis. Therefore we can find the axis by calculating a cross product (Rei − ei ) × (Rej − ej ) for one of the three possible distinct pairs from the set of indices 1, 2, 3–unless it happens that this cross-product vanishes. Usually all three of these cross products will be non-zero vectors on the rotation axis, but in exceptional circumstances it can happen that one or more will vanish. It can even happen that all three vanish! But this only when A is the identity matrix, in which case we are dealing with the trivial rotation, whose axis isn’t well defined anyway. At any rate, any of the three which is not zero will tell us what the axis is. (2) How do we find the rotation angle? As a result of part (1), we have a vector α on the rotation axis. Normalize it to have length 1. Choose one of the ei so that α is not a multiple of ei . Let u = ei . Then Ru is the i-th column of R. Find the projection u0 of u along α, set u⊥ = u − u0 . Calculate Ru⊥ = Ru − u0 . Next calculate u∗ = α × u ⊥ . and let θ be the angle between u ⊥ and Ru⊥ . The rotation angle is θ if the dot-product Ru⊥ • u∗ ≥ 0 otherwise −θ. Exercise 12.9. If   0.899318 −0.425548 0.100682 R =  0.425548 0.798635 −0.425548  0.100682 0.425548 0.899318 find the axis and angle. 12.10. Euler’s Theorem The fact that every orthogonal matrix with determinant 1 is an axial rotation may seem quite reasonable, after some thought about what else might such a linear transformation be, but I don’t think it is quite intuitive. To demonstrate this, let me point out that it implies that the combination of rotations around distinct axes is again a rotation. This is not at all obvious, and in particular it is difficult to see what the axis of the combination should be. This axis was constructed geometrically by Euler. Chapter 12. Transformations in 3D 17 P1 θ1 θ1 2 2 β α θ2 2 θ2 2 P2 Let P1 and P2 be points on the unit sphere. Suppose P1 to be on the axis of a rotation of angle θ1 , P2 on that of a rotation of angle θ2 . Draw the spherical arc from P1 to P2 . On either side of this arc, at P1 draw arcs making an angle of θ1 /2 and at P2 draw arcs making an angle of θ2 /2. Let these side arcs intersect at α and β on the unit sphere. The the rotation R1 around P1 rotates α to β , and the rotation R2 around P2 moves β back to α. Therefore α is fixed by the composition R2 R1 , and must be on its axis. Exercise 12.10. What is the axis of R 1 R2 in the diagram above? Deduce from this result under what circumstances R1 R2 = R2 R1 . 12.11. More about projections If P is a point in space and f (x, y, z) = Ax + By + Cz + D = 0 a plane, then just about any point other than P can be projected from P onto the plane. The formula for this is very simple. Suppose the point being projected is Q. The projection of Q onto the plane will be the point of the line through P and Q lying in the plane. The points of the line through P and Q are those of the form R = (1 − t)P + tQ, so we must solve f ((1 − t)P + tQ) = (1 − t)f (P ) + tf (Q) = 0 to get R= f (P ) Q − f (Q) P . f (P ) − f (Q) The explicit formula for this is ugly, unless we use 4D homogeneous coordinates. We embed 3D into 4D by setting the last coordinate 1, making P = (a, b, c, 1), Q = (x, y, z, 1) and thus in homogeneous coordinates the projection formula becomes simply R = f (P )Q − f (Q)P . Projection in homogeneous coordinates is a linear transformation whose matrix is   A AxP  B  BxP f (P )I −   [xP yP zP wP ] = f (P )I −  C CxP D DxP  AyP ByP CyP DyP AzP BzP CzP DzP  AwP BwP   . CwP DwP This is an especially pleasant formula because it continues to make sense even if P is at infinity. Also, it respects our interpretation of points as row vectors and affine functions as column vectors.