The Geometry of Computer Graphics, by Walter F. Taylor Wadsworth and Brooks/Cole, 1991 ISBN 0-534-17100-1 Errata, additions, further remarks and refs, etc. Last modified November 29, 2000 ------------------------------------------------- See the Latex Graphic Companion for all sorts of graphics programs. A number of simple graphics languages are implementend there. (more later on this.) ------------------------------------------------- A general good reference: A. T. Fomenko and T. L. Kunii, Topological Modeling for Visualization, Springer-Verlag, Tokyo, 1997, QA 611 F629 1997. Possibly for the Preface: Note that there is an area of applied mathematics known as computational geometry. It is _not_ the same as the subject of this book. It is an essentially combinatorial inquiry into algorithmic solutions about points, lines and planes in space. For example, one might ask for an algorithm to find equations for the facets of a convex polyhedron, given coordinates of the vertices. To find such an algorithm would be a project in computational geometry. (In my book, a few such problems have been solved ad hoc, but they are not our focus.) For a good account of computational geometry, see Computational Geometry, Second Edition by Joseph O'Rourke Cambridge University Press, 1998 ISBN 0-521-64010-5 Preface, page vii, first full paragraph. Add a sentence to the end of the paragraph: "A very reasonable alternative path for those who have Mathematica available would be to use Mathematica as the primary computing language and environment, but agreeing not to use a given built-in feature (such as Bezier curves) while analyzing that feature mathematically." Preface, acknowledgements. Christopher Arnold did a pilot project on the stars, back in the spring of 1989. p. 5, second display. v should be v/\alpha_j p. 6, line 2. b should be \beta p. 18, line 5, " ... we know that" should be "we know that if" p. 29 footnote 8 ------ mention the parameter FLT_EPSILON that is a safe approximation to zero. (Occurs in some implementations of C.) p. 74, Exercise 5. In the text that occurs after the displayed matrix equation, a minus sign and a plus sign are reversed. The equations should read, "Aw_1 = cost w_1 + sint w_2 and Aw_2 = -sint w_1 + cost w_2." p. 87, just before Exercises. "The following two exercises would of course be carried out with the methods of this section and the next." What was intended was "Exercises 3 and 4 would of course ... p. 111 Exercise 6 on Gouraud shading. First isolated line says ......... for some positive $\lambda$ .... It should say, ..........for some $\lambda$ with $0 < \lambda < 1$. Same correction once again, later on the page. p. 111 ff. Section 2.6, Recursion in geometry. Another fascinating reference on geometrical recursion is "The algorithmic beauty of plants," by Przemyslaw Prusinkiewicz and Aristid Lindenmayer, Springer-Verlag, 1990. Like ours, their development incorporates turtle graphics into a recursive scheme. While we lodge the recursion in a (turing-complete) programming language, they lodge recursion in languages of a narrower sort (collectively known as L-systems). The two-dimensional images of that book make a good acid test for the understanding of our Chapter 2, and would make a good supplementary project. For readers of this book it should be easy to put the desired features of a given picture-type into a program of the type that is illustrated here in Section 2.6. A more thorough understanding of Prusinkiewicz-Lindenmayer would of course come from a general implementation of L-systems (or OL-systems, or DOL-systems, with or without parameters, and so on). This would be a bigger project. The 3-dimensional images of Prusinkiewicz-Lindenmayer present no further problems beyond the general understanding that we supply in Chapter 6. p. 112 middle. "arrangement ... of sixteen segments that is shown at the right in Figure 2.8." It should refer to the lower part of Figure 2.8. (The figure was apparently rearranged at the last minute.) p.125. In Exercise 2, there is a reference to Exercise 4 at the end of 3.1.4. It should be a reference to Exercise 5. p. 126 Program for Mandelbrot set. The stopping condition may not be quite right. Haven't sorted this out yet. p. 133, Exercise 2, " ... multiple revisions of a function F ... " This would correspond better to earlier notation if it said, " ... multiple revisions of a function f(x,y) ... " p. 134, displayed code. This code is inaccurate. It asks for g(x,y) after y has been set to a random value. This is hardly what is wanted! One could change the first equation to w = rand()%1000, and the second equation to w = w/1000. p. 143, Lemmas 8 and 9. It says that the other branch is obtained by adding a minus-sign to the y-coordinate. It should of course be the x-coordinate that is changed in sign. p. 149, Exercise 5. The curve with equation 4x^2(1-x^2) = z^2 has phi = Pi/4, not Pi/2. p. 150, captions to figures 3.11 and 3.12. Replace y by z. (In the development of Lissajous figures, we have been labeling the vertical axis by z.) p. 152, Exercise 5. \pi/2 should be \pi/4. There should be a reference back to Exercise 2 on page 125. p. 153, Exercise 2. It should have been said that the vertical motion of the horses was sinusoidal (i.e. simple harmonic motion). That is a simplifying assumption that puts the merry-go-round into the category of the cylindrical Lissajous figures. p. 153, Exercise 4. alpha = m/n + epsilon, with 2n\pi\epsilon a small angle. Similar change later in the exercise. p. 153, Exercise 5. Something wrong. It is supposed to be sin(2t) together with sin(t). p. 167, second paragraph, third line. "start at end at" should be "start and end at" p. 173, middle. Where it says ............ relaxed B-spline determined by G0, G1, ... it should say ............ relaxed B-spline determined by A0, A1, ... p. 174 ff. I forgot to point out that there is a slight change in the method if one has apical control points for a closed curve or points to be interpolated with a closed curve. Until a revision occurs, let it be an exercise to work this out! (It is an easy modification of what we already have.) There are matrices like M_n and E_n, only slightly different. The series still works. p. 175, large matrix equation in middle of page. I see now that it would have been better to multiply by the matrix on the right. Then we would have: [A_1 A_2 ... ] x Matrix = [G_1 G_2 ... ] This would coordinate better with the idea that points are column vectors. It would also point out that this is not the same as a linear transformation on the space itself (where matrices go to the left). It would make it (even more) obvious that the same formulas work for three dimensions, as asserted on page 310. (This is now merely an increase in column length of the A and G vectors.) Finally, the commutation of B-splines with affine maps (pages 213-215) becomes further elucidated (since matrix multiplication on the left commutes with matrix multiplication on the right). p. 179 B-spline data for heart. left side, middle control point. Should be c 1 6.5 (not c 9 6.5). pp. 182-3, Exercise 6, about music. My attention has been called to the following recent publication, which concerns ... "computational representations and models in music, laying the foundations for tomorrow's music software." Appears to be an edited collection of articles. Alan Marsden and Anthony Pople, Computer Representations and Models in Music, Academic Press, $59.50, Jan, 1992, ISBN 0-12-473545-2. p. 183 Exercise 9, about cartoon faces. I since discovered another reference on this topic: "Towards autonomous control of 3-dimensional facial animation," by Keith Waters. Pages 252-263 in: Computers in Art, Design and Animation, Springer-Verlag. Edited by John Lansdowne and Rae A. Earnshaw. Another reference is the wonderful book, The Visual Display of Quantitative Information, by Edward R. Tufte, Graphics Press, Cheshire, CN, 1983. Tufte alludes by example to the general method on page 97, and gives some further references. Without reference, Tufte calls these "Chernoff faces," but my other sources do not. I will not adopt the term until this Chernoff --- and his role --- are more clearly identified. (Is he the only one who had this, in retrospect, obvious idea?) Tufte's book is also recommended for reasons that go way beyond this one small topic. It is particularly essential for anyone who wishes to understand how the mathematical methods of my book can be applied to the representing of data. I show you how to compute the picture, but Tufte shows you which pictures are worth making in the first place. p. 188. In the proof of Lemma 17, it says, "by Lemma 17 ..." This looks like what is known as circular reasoning. Luckily, in this case it is merely a typo. It should say, by Lemma 16. p. 192 Figure 3.31. The length of vector v should be exactly 2d. p. 193, proof of Theorem 3.16. The same function is denoted both by R and by f. You could change R to f, or f to R (or the impish solution is to adjoin the equation R = f!). p. 200-201, and again on page 366, shapes of shells, and relation to the logarithmic spiral and the logarithmic helix. Dr. Avery has kindly shown me "On growth and form," by D'Arcy Thompson. (Abridged edition, Cambridge University Press, 1961, 1966, 1969.) See his pp. 172-180 for the spiral. His treatment for the logarithmic helix begins on his p. 188. Our formulas (the deltas on our page 366) do not appear there, but it is clear that the space curves described by Thompson (which he calls helico- spirals) are the same as our logarithmic helices. This follows directly from Thompson's characterization of his helico-spiral as "always geometric- ally similar to itself." Thompson characterizes the general shape of a helico-spiral shell by three angles: alpha, beta and gamma. Alpha and beta are related to our parameters a and K (p. 366), by tan alpha = 1/a and tan (beta/2) = 1/K. The angle gamma depends not so much on the shape of the helico-spiral as on how a family of helico-spirals are put together to make the full pattern of the shell. Thompson's book also contains a number of references to earlier works on this subject. (He gives a reference to Wallis in 1659 for the mathematical treatment of this space curve.) p. 202 footnote 18. Should say, "For another discussion of spirals in nature ... " [not shells] p. 211, line 6 from bottom. re-i\theta should have -i\theta as an exponent. p. 221, Equation (3.31) should read xb cos t_0 + ya sin t_0 - ab = 0 p. 222 statement of Theorem 3.25. " ... a local maximum ... for t0' close to t0 ... " Redundant. Either say local, or add the clause about closeness. p. 223, top. "... the curve ... can be determined by eliminating t0 from Equations (3.33) and (3.32). We will do this ... in Theorem 3.30." Well, actually, in the proof of Theorem 3.30 we don't eliminate t0, but we exploit it as a parameter. It's probably hard to eliminate it in closed form. Therefore, what should have been said here on page 223 is that " ... even if there is no way to eliminate t0, since Equations (3.32) and (3.33) are linear in x0 and y0, it is generally possible to solve them for x0 and y0 (as expressions in t0), thereby yielding usable parametric equations for the envelope. This is what we shall do in Theorem 3.30. In the more advanced case of Equations (3.32) and (3.33) taken non-linear, we shall see in Section 3.4.11 that it is still sometimes possible to use Equations (3.32) and (3.33) to parametrize the envelope." p. 226, Proof. "Lemma 3" here refers to Lemma 3 of section 3.1.1, page 139. p. 227, Exercise 3. The equation here does indeed define a cardioid; unfortunately its diameter is 4d. (A substitution of (2x,2y) for (x,y) will yield the cardioid of diameter 2d.) p. 229, middle: " ... at most one solution " Should be . (x0 and y0 are functions of t.) p. 236, Exercise 2. x^3 should be s^3. (As stated in the book, it isn't even a line.) p. 237, Algorithm. A bright and motivated student could probably fill in the blanks here, but it will help to have it spelled out slightly. The main stumbling block is how to do the first step, namely, to parametrize the family of normals with slope as parameter. I have a handout on this, that ultimately leads (through Clairaut's equation) to explicit parametric equations for the evolute of an ellipse. p. 250, Figure 3.63: trajectories and envelope. The envelope was omitted by mistake from the figure. p. 260, middle. Right after Equation (3.45). fomer should be former p. 291, footnote 8. Needs to end with parenthesis. p. 296, line 3. By Lemma 1, we mean Lemma on page 274. Also in line 10. p. 302, Section 5.3.3, Reflections. The matrix contains too many 1s. The top three 1s in the fourth column should be 0s. p. 303, Second displayed summation is stated to be true for (1<=j<=k<=3). It should say (1<=i<=j<=3). pp. 333-4. Exercises. This exercise set should have contained a restatement of Exercises 1 and 2 on page 309 (to find the distance between two cities, given the longitude and latitude of each city). This can easily be solved using the matrices C-long and D-lat of Section 6.1. The solution implied on page 309 is in some sense more elementary, since it can be carried out purely with trigonometry, and does not require matrices. Nevertheless, the solution with matrices is actually more straightforward, less ad hoc, and probably less error-prone. p. 348, footnote 19, about pseudo-projective geometry. Actually, there is a consistent way to do projective geometry with positive scalars. This theory has been proposed as a practical model for computational geometry. See "Oriented Projective Geometry: A Framework For Geometric Computations," 237 pages, by Jorge Stolfi, Academic Press, San Diego, 1991. ISBN 0-12-672025-8. This theory refines that of this book. The main practical problem it addresses is that of keeping track of the two sides of a plane, EVEN WHEN projective transformations are involved. (See e.g. update to page 379, below.) p. 351, second paragraph. "...one pass through the while loop..." "while" should be typewriter font. p. 353, middle, database for tetrahedron. Obviously the window is not correct. p. 358, Exercise 4, on drawings related to architecture. For a discussion of the state of the art (and art it is!) for pictures of this type, see "Visual Modeling in Architectural Design," by Tom W. Maver. Pages 274-282 in: Computers in Art, Design and Animation, Springer-Verlag. Edited by John Lansdowne and Rae A. Earnshaw. p. 359, line 1. " .... where r is a polar coordinate ...." I imagine that this was well enough understood, but actually this is correctly known as a cylindrical coordinate. p. 364, Exercise 8 refers to a point R, which happens to be missing from Figure 6.18 on the previous page. To correct this omission, the point with coordinates (0, -alpha, 1) should be labeled R. p. 368, Exercise 2 .... pictures of the logarithmic helix ... "Experiment with different values of the parameters a and b." There is no parameter b. What is intended is K. p. 379, footnote concerning knowing which side of a figure is which, after rotation. If one refines the theory a la Stolfi (see update to page 348, above), then this can be determined easily as part of the algorithm. (Well I haven't done it myself, but Stolfi seems to imply that if you really understand his theory, and make it your own, then these things will work easily.) p. 372, THE SEA TURTLE. This was independently introduced by Prusinkiewicz and Lindenmayer (mentioned above in the update to page 111). p. 383, line 9, reference to a putative Equation (6.4.1). There is no equation with this number. The intended reference was to the only equation on page 384 (which was not, but should have been, numbered). p. 398, 12 lines up. sethsbcolr should be sethsbcolor p. 400, middle. Formulas for r and s. Should be P2-P4 and P1-P3. p. 402, middle. "... the reader can easily extend the Bezier translator of section 3.2.6 to a translator that works in three dimensions." There is no error here, but I wish to make a couple of comments, based on student reaction to this sentence. Absolutely nothing has to be changed from the two-dimensional case. In particular, the matrix on page 175, and its inverse, are fine as they are. They don't have to be made three-dimensional in any way. One simply works one component at a time (or does three coordinates in parallel, where previously one did two coordinates in parallel). p. 413, line 4. "(Chapter 3)" should be "(Chapter 6)". p. 413, near top: " ... pictures that help reveal some things about 4-dimensional geometry"; also, p. 416, second paragraph: " ... 2-space as a small window on the world of 4-dimensional geometry." Someone has directed my attention to an entire book on this topic: "Experiments in four dimensions," by David L. Heiserman, TAB Press. p. 425, Exercise 3, "Actually, the preceding algorithm is not much more difficult to work out than is ..." This doesn't quite say it! .... should be " ... not much less difficult ... " p. 419, past the middle. (Figure 6.50 is not very different from .... ) Also here I could have mentioned Figure 3.70. p. 422, Equation (6.16). It should have one more summand of -1. In other words, if we use C' to denote what is (mistakenly) written there for C, the correct value of C is C' - 1. (The -1 comes from the right-hand side of Equation (6.12).) p. 436, last paragraph: " ... the vector of coefficients for Gi ... " It should be -------------------------------------- index: Separate the index into alphabetic groups data base should be database hyperbolas, as embroidery; reference to page 223. This tells you, slyly but erroneously, that the answer to Exercise 1 on page 223 is a hyperbola. It is actually the parabola that is parametrized by the equations x = (N-m)^2/N, y = m^2/N. So the index entry should be: parabolas, as embroidery. Pascal; reference to page 227, where Pascal's limacon in discussed. However, it should not have been Blaise Pascal (1623-1662), but rather his father Etienne (1588-1640). The index should contain names and dates for the Gram and Schmidt of the Gram-Schmidt Theorem. I searched for these when writing the book. It was not until three or four years later (February, 1994) that I found something. A student showed me an (undocumented) reference in Bernard Kolman's Elementary Linear Algebra. It says that J"orgen Pederson Gram (1850-1916) was a Danish actuary, and that Erhard Schmidt (1876-1959) first pioneered the method in 1907. See also his paper on Hilbert spaces in 1908. -------------------------------------- diskette: For some reason I neglected to include to_ps.awk (pages 101-102). Fortunately, the awk program printed in the book can be copied literally and used (nothing was omitted or abbreviated).