Curves and Surfaces for CAGD
A Practical Guide

5th edition

by Gerald Farin

Published by Morgan-Kaufmann

Published 2002
499 pages

ISBN 1-55860-737-4

Errata for the 5th edition

Link to Errata for the 4th edition

Please send email with suggestions/corrections to
If you find an error, you'll get credit in this Errata page!

The date that each correction was added is given in brackets as [mo/day/yr].

  • p. 17, A correction is in order for the paragraph below the displayed equation for a that involves three sums. It should state that the b_j in second sum are vectors and the b_j in third sum may be interpreted as points or vectors. (Bob Gouzinis, Channel Islands) [1/21]
  • p. 20, Section 2.3 should be skipped because the equation P^TAP = I is incorrect. Also, the ellipse in Figure 2.5 is not accurate. For a derivation of the norm ellipse, see our lecture slides for Practical Linear Algebra. Start at slide 35 - principal components analysis in the file (Karen Daniels, Bob Marceau, Franck Kamayou, and Adam Russell)    [11/14].
  • p. 24, Problem P1: this problem needs the ratio function. It is defined a bit later, on p. 27. (J. Miller)    [8/04].
  • p. 30, eq. (3.14): should say b[t,s] = (1-s) b[0,t] + s b[1,t]. This is for more harmony; the original is not technically wrong. (Martin Kraus) [9/05]
  • p. 31, Fig. 3.4. This figure is labeled correctly, but in order to be in better harmony with the definitions on p. 30, the labels b[0,s] and b[1,s] should have been b[s,0] and b[s,1].    [4/02].
  • p. 65, eq (5.21): the n/(n-r)! should be n!/(n-r)! (B. Ehrlich)    [9/02].
  • p. 73, near bottom: the reference to Section 11.2 should be to 10.2. (Minho Kim) (B. Ehrlich)    [9/03].
  • p. 82, eq. (6.2): j should run from 1 to n+1 instead of from 0 to n+1 (Juntao Ye)    [4/02].
  • p. 109, first eq.: there is a missing "c". (Yadong Li)    [1/02].
  • p. 112: reference [48] is incorrecct. It should be: B. Fowler and R. Bartels. Constraint based curve manipulation. IEEE Computer Graphics and Applications, 13(5):43-49, September 1993. (Wei Shui Li)    [7/02].
  • p. 122, "u_I is the (r-i)th element of U^r_i, with i=0 denoting the first of U^r_i's elements" should read "u_I is the (r-i)th element of U^r_i, its elements being counted starting from 0." (Minho Kim).    [9/04].
  • p. 123, paragraph after (8.3): the three intermediate points should have their superscripts reduced by one (so that we are in accordance with (8.3)). (T. Vossemer).    [3/03].
  • p. 126, after (8.10): the expression (u_r-U^0_1)/|U| should be (U^0_1-u)/|U|. (L. Fernandez)    [4/02].
  • p. 127, Ex. 8.3, n=1 case: the control points should be d0,d1,d2, and the domain should be [u0,u2]. (Jed Soane)    [12/01].
  • Page 128: If k denotes the step in the de Boor algorithm and for k=0 we have points d_i^0 = d_{I-n+1+i}, i=0,...n, then something is wrong with the subscripts of the knots. It says: U_i^k It should say: U_{i+1}^{n-k+1} (Javier Sanchez-Reyes)    [2/02].
  • Page 129 It says: U_i^k = ... It should say: U_{i+1}^{n-k+1} = [u_{I-n+k+i}, u_{I+1+i}](Javier Sanchez-Reyes)    [2/02].
  • Pages 129,143 It says: alpha_i^k = ... It should say: alpha_i^k = u - u_{I-n+k+i} / u_{I+1+i} - u_{I-n+k+i} It says: for k = r+1,...,n It should say: for k = 1,...,n-r(Javier Sanchez-Reyes)    [2/02].
  • p. 130, 3rd line from bottom: d[] should be b[] (Minho Kim)    [9/04].
  • p. 131, after figure 8.8: d[] should be b[] (Minho Kim)    [9/04].
  • p. 131, 7th line from bottom: superscript of U should be n-1, not n-i. (Juntao Ye)    [4/02].
  • p. 134, third equation from the bottom: the summand argument should be 1/n b [V^(n+1) | v_i](M. Gnuffi)    [9/04].
  • p. 137, 6th line from bottom: c0,c1,c2,c2 should be c0,c1,c2,c3 (M. Bedard)    [4/03].
  • p. 137, 4th line from bottom: the reference to Fig. 8.14 is somewhat unfortunate: that figure shows the C1 case and thus u1 should only be a double, not a triple knot. (M. Bedard)    [4/03].
  • p. 139,Fig. 8.15. The point b3 should also be labeled as c0. (M. Bedard)    [4/03].
  • p. 141, figure 8.17. The first and last knot should have three tick marks, not two. (B. Ehrlich)    [10/02].
  • p. 144, eq "Derivative of B-spline curve": the summation should start at i=1, and instead of Delta d_i it should say Delta d_{i-1}. (Xiaozhen Lu)    [1/04].
  • p. 148, eq (9.4): the matrix has eight columns, but should only have seven. (J. Femiani)    [9/02].
  • p. 154: reference [48] is incorrecct. It should be: B. Fowler and R. Bartels. Constraint based curve manipulation. IEEE Computer Graphics and Applications, 13(5):43-49, September 1993. (Wei Shui Li)    [7/02].
  • p. 156, eq. 9.12: the second row in the matrix should have all three subscripts increased by one. (Jed Soane)    [12/12/01].
  • p. 182: two displayed equations use the dot to denote two different things: the equation in remark 3 denotes multiplication by a scalar, the equation in 10.3 uses it to denote the dot product. (Martin Kraus) [9/05]
  • p. 184, remark 5: the term k' is not defined. It is given by (23.3) on p. 421. (B. Ehrlich)    [10/021].
  • p. 193, fig. 11.2 is mislabeled. Reading from left to right, currently we encounter A-, A+,B-,B+. This should be A-,B-,B+,A+. (Jiansong Deng)    [8/02].
  • p. 201, eq.(11.26): the rightmost vector should have as its last element a triply dotted x, not a doubly dotted one. (Ken Tsutsuguchi)    [8/02].
  • p. 207, Fig. 12.2: the top point (solid) in that figure should be labeled as bold 0 (B. Ehrlich).    [11/02].
  • p. 241, summation index in eq. (13.17) should be "i". (K. Gnuffi).    [9/04].
  • p.261, first three displayed equations: The terms <i> and <n-i> should be interchanges, + same for j (M. Reimers) [4/06]
  • p. 261, third displayed equation: the expression for c_k needs to start out with the summation over i+j=k.    [2/03].
  • p.271, Fig. 15.3: the caption should say n=10 and m=9. (B. Ehrlich)    [3/03].
  • p. 271, the displayed equation before (15.2) is wrong. The first row matrix should read [1-i/m, i/m], the last column matrix should read [1-j/n \\ j/n], and the middle square matrix should read (row by row): [[b_00,b_0n][b_m0, b_mn]]. (R. Patekar)    [3/03].
  • p. 279/280, Exaple 15.1. The solution is wrong. For a correct version, click here (M. Gnuffi)    [01/03].
  • p. 281, eq. (15.19): the summation should start at i=1, and instead of u_ (r,n_i) ; also it should say u_(r,i). (M. Gnuffi)    [01/03].
  • p. 282, after eq. (15.20): the value for K value should be (m+1)*(n+1) - 1(M. Gnuffi)    [09/04].
  • p. 286: after second equation: it says "rows", it should say "columns"(M. Gnuffi)    [09/04].
  • p. 295, footnote 2 says "...L+2 control points for L data points";it should say "...L+3 control points for L+1 data points"(M. Gnuffi)    [09/04].
  • p. 304, Figure 16.18: it says "The open point is inside", it should say "The open point is outside" (M. Gnuffi)    [09/04].
  • p. 312, example 17.1, The points b_300 and b_030 should be labeled b_200 and b_020 instead (B. Ehrlich).    [01/03].
  • p. 319, example 17.2 refers to example 18.1. This should be 17.1 (B. Ehrlich).    [01/03].
  • p. 322, caption Fig. 17.9: the shown control points are those of only one subpatch. (Martin Kraus) [9/05]
  • p. 319, example 17.2, bottom. The factor should be n=2, not n-1=2 (B. Ehrlich).    [01/03].
  • p. 328, second displayed equation: u1 = det[p,p1,p2,p3,p4] / det[p1,p2,p3,p4] should be u1 = det[p,p2,p3,p4]/det[p1,p2,p3,p4]. (Antonio Álvaro de Assis Moura)    [09/04]. Also, the use of "det" is misleading; it should be "volume". (Martin Kraus) [9/05]
  • p. 329, Fig. 17.16. The labeling is not consistent with Fig. 17.15. For example, the leftmost point should not be b0002 but rather b2000. The topmost point should be b0200 etc. (Martin Kraus) [9/05]
  • p. 330, third line: should say "construct." (Martin Kraus) [9/05]
  • p. 331, Fig. 17.7: should say for s=5 and n=2. Also, the interior vertex should only have five subscripts. The shown edges are only a subset of all connectivities. This may be misleading, but including all connectivities would result in a cluttered figure. (Martin Kraus) [9/05]
  • p. 337, second displayed equation: p^dot should be replaced by D_d. Also D_d(u) should be replaced by D_d w(u). (B. Ehrlich). [02/03].
  • p. 337, fourth displayed equation: D^(r-j)_d(u), the last term, should be replaced by D^(r-j)_d b^n(u). (B. Ehrlich). [02/03].
  • p. 347, eq. (18.7): every subscript "L" should be replaced by "P" (M. Gnuffi)    [09/04].
  • p. 370, before last displayed equation: the references to (5.32) and (5.33) need to be replaced by (6.24) and (6.25) (T-W. Kim). [10/03].
  • p. 371, In the two displayed equations for h^0_i and h^n_i, replace h^0_i by h^n_i and vice versa. Same for the v^0_i and v^n_i in the next two equations. [02/03].
  • p. 373, section 20.4 Comments between parathensis for "p0_hat ... pn_hat" and "r0 ... rn" are swapped. The p_hat row should have the comment: "(from the degree elevated triangular patch)", and the r row should have the comment: "(from the tensor product patch") (M. Bedard). [02/03].
  • p. 374, end first paragraph: alpha0 and beta0 should be lambda0 bar and lambda1 bar. Also, alpha1 and beta1 should be lambda1 bar and lambda2 bar. (Martin Kraus) [9/05]
  • p. 379, (21.3): the third term should be A^2D, without the (1) superscript. (B. Ehrlich)    [04/03].
  • p. 379, after (21.3): the displayed equation, middle term, should read E\LamdbaE^{-1}E\Lambda E^{-1}. (M. Bedard)    [05/03].
  • p. 381, 2a: V^(1)_i should be v^(1)_i (bold v). (Martin Kraus) [9/05]
  • p. 384, (21.8): e^i_j should be e^{i+1}_j (B. Ehrlich) [04/03].
  • p. 384 (21.8): equation is incorrect. It should be v^(i+1) = [(n-3)/n] v^i + [1/n](average of f^(i+1)_j) + [2/n](average of e^(i+1)_j). (Nathan Carter) [05/14]
  • p. 385, the displayed matrix equation has two entries e^{i+1}_4 on the left hand and also two e^i_4 on the right side. The first sub 4's in both cases need to be sub 3's. (James Doebbler) [04/05].
  • p. 395 eq (21.16): 1/2 needs to be replaced by -1/2. (Martin Kraus) [9/05]
  • p. 406 before Section 22.4: the reference to Section 14.10 should be replaced by 16.3., (M. Gnuffi) [09/04].
  • p. 452: reference [48] is incorrecct. It should be: B. Fowler and R. Bartels. Constraint based curve manipulation. IEEE Computer Graphics and Applications, 13(5):43-49, September 1993. (Wei Shui Li) [7/02].
  • References: [543] should have year 1959, not 1953. (A. Eigenwillig) [12/05].