Book Corrections for Game Physics (1st edition)


Book Corrections Organized by Date of Change

23 October 2006, page 499. Before the last displayed equations, there is "replacing y_{i+j} by z_j", where the underscore means "subscript". This should be "replacing y_{i+j} by z^j, where the carat means "superscript". That is, the subscript j on the z-term should be a superscript.

10 May 2006, page 318. The first line of pseudocode in the function NoIntersect has "Cfg1". It should be "info1".

08 November 2005, page 397. The displayed equation for g(w) should have a_{ij} instead of a_{ji}.

12 May 2005, page 248. The pseudocode has a line starting with "double fNumer". The last term should be "Dot(B.w,kB)" instead of "Dot(B.w,kA)".

03 May 2005, page 273. The pseudocode at the top of the page has arithmetic updates with the wrong signs. It should be
  if ( ci.B == cj.A )
  {
      A[i][j] -= ci.B.massinv * Dot(ci.N, cj.N);
      A[i][j] -= Dot(rBNi, ci.B.jinv * rBNj);
  }
  else if ( ci.B == cj.B )
  {
      A[i][j] += ci.B.massinv * Dot(ci.N, cj.N);
      A[i][j] += Dot(rBNi, ci.B.jinv * rBNj);
  }
This appeals to the symmetry of the situation.

13 April 2005, page 177. The line right before the "Point X(float u)" pseudocode mentions "... compute N_{i,2} for ...". This should be "... compute N_{i,2}(t) for ..."

13 April 2005, page 179. The pseudocode has as part of an expression "* fInvD0". This should be deleted. The equation is
basis[j][k] = c0*basis[j-1][k] + c1*basis[j-1][k+1]

25 March 2005, page 60. The change on this page is a consequence of the change "22 January 2004, page 26", where
  a(t) = -r0*sigma^2*R + Cross(alpha,r)
is the correct equation for the acceleration. In the paragraph before equation (2.88), the acceleration formula needs to be replaced by the one mentioned above. This affects the construction in equation (2.89). That equations turns out to be
tau = J*alpha + Cross(w, -m*sigma*h0*r)
The similarity between F = m*a and tau = J*alpha occurs when h0 is zero. However, in the more general case when h0 is not zero, the cross product term has a contribution. Using J as defined in the displayed equation after equation (2.88), some algebra will show that
tau = J*alpha + Cross(w, J*w)
which in fact is equation (2.90) since alpha = dw/dt is the angular acceleration mentioned on page 25.

25 March 2005, page 253. In equation (5.28), the conditions for the integral to be g(x0,y0) should be
  x1 <= x0 <= x2,  y1 <= y0 <= y2

25 March 2005, page 261. The third line from the top of the page has "as close to dot(d)_i as possible". The underscore denotes a subscript. This is missing a superscript minus sign and should be "as close to dot(d)^{-}_i". The carat denotes a superscript.

25 March 2005, page 268. In the second group of displayed equations (for torque resolution), the superscript on the r term in "g_4 * r^1_A x N_4" term should be a 4, not a 1. That is, "g_4 * r^4_A x N_4".

25 March 2005, page 274. The pseudocode in the top part of the page has a line of code for computing b[i]. The last part of that equation has Dot(Ndot,At4-Bt4), but is missing a two and should be 2*Dot(Ndot,At4-Bt4).

25 March 2005, page 292. The last statement for edge E[i] to be optimal should have the conditions
Dot(perp(N[i]),D) = 0 and Dot(perp(N[i-1]),D) < 0
That is, the indices needed to be adjusted.

25 March 2005, page 439. The displayed equation after equation (8.3) has an extra x0 term. The first x0 should be deleted, so the equation should be
x(t) = exp(...)*[x0 + ...]

25 March 2005, page 443. The sentence "Finally, the quadratic equation can have a repeated root..." has a condition "when b = a^2/4". This should be "when b = -a^2/4".

20 February 2005, page 26. In the section "Motion About a Moving Axis", the sentence "The initial position r0 = r(0) = r0*xi" should instead have "r0 = r(0) = r0*xi + h0*D" (where xi denotes the greek letter).

10 February 2005, page 637. The entry in the upper-left corner of the inverse matrix should be a22*a33-a23*a32.

25 January 2005, page 69. In the display equation for the double integral of p(x,y), the middle integral should be over R, not over L.

25 January 2005, page 247. The large right parentheses in equations (5.23) and (5.24) should be to the right of r_A and r_B. Inside the parentheses should be
N0/mA + JA^{-1}*(rA x N0) x rA
and
N0/mB + JB^{-1}*(rB x N0) x rB

25 January 2005, page 263. In the last paragraph of the example, the one at the end of the block with the gray line on the left, the summation index is i but should be j.

25 January 2005, page 290. The first paragraph after the top block of pseudocode should start with "In the worst case, the polygons intersect." That is, there are no early returns of "false" in the TestIntersection function.

06 January 2005, page 481. The interval for the drag coefficient should be [0,1] (closed) rather than [0,1) (half-open).

22 September 2004, page 260. The displayed equation for the angular velocity should be
w_A^{+} = w_A^{-} + J_A^{-1}*(f0*Cross(r0,N0) + f1*Cross(r1,N1))

29 July 2004, page 93. Equation (3.4) is missing a 2 in front of the last occurrence of Cross(w,r0).

29 July 2004, page 113. The right-hand side of the F_theta eqaution is missing an r factor. It should be
= r*(-mg*sin(theta) + Dot(C,T))

29 July 2004, page 126. The third paragraph has "m1*(dot(y3)^2+dot(y1)^2)/2" when it should be "m1*(dot(y3)+dot(y1))^2/2". The next line has similar mistakes and should be "m2*(dot(y3)+dot(y2))^2/2 = m2*(dot(y3)-dot(y1))^2/2".

26 July 2004, page 106. The paragraph before the final set of displayed equation has the kinetic energy stated incorrectly. It should be
T = m*(dot(x1)^2 + dot(x2)^2)/2
The dots are missing and the division by 2 is missing.

23 July 2004, page 226. Quite a few typographical errors in equation (5.7). It should be
J(t) = integral_B (|r|^2 - r r^T) dm
      = integral_B (|Rb|^2 I - (Rb)(Rb)^T) dm  // T was in wrong place
      = integral_B (|b|^2 I - R b b^T R^T) dm
      = integral_B (|b|^2 R R^T - R b b^T R^T) dm
      = R (integral_B (|b|^2 I - b b^T) dm) R^T  // I was missing, extra R was in integrand
      = R(t) J_body R(t)^T

15 July 2004, page 555. In Example A.5, the second equation should be "x1 + 2*x2 + 2*x3 = 11". The book incorrectly lists the coefficient of x2 as 3.

28 June 2004, page 83. The displayed equation for work W2 has "(t,-t,0) * (1,2t,0)". It should be "(t^2,-t,0) * (1,2t,0)" and the work is W2 = -1/3.

14 June 2004, Odd numbered exercise solutions, Exercise 2.7. There is an expression for dot(u) with numerator "dot(dot(r)) - (r * u)u" but should be "dot(dot(r)) - ( dot(dot(r)) * u)u". The term dot(u) is the time derivative of u, dot(r) is the time derivative of r, and dot(dot(r)) is the second derivative of r with respect to time.

04 June 2004, Odd numbered exercise solutions, Exercise 2.1. There is an expression s(t) = sqrt(1+9t^4) that should be dot(s)(t) = sqrt(1+9t^4). The dot(s) notation is the time derivative of s.

23 May 2004, Odd numbered exercise solutions, Exercise 2.11. The E5 edge inertia tensor table components Iyy and Izz are reversed, as are those for the F2 face inertia tensor table. The dS expression has lambda that should instead be
c*sqrt((1/a)^2+(1/b)^2+(1/c)^2).

23 May 2004, page 22. The displayed equation for dot(a) just before equation (2.25) has an error. The B term has a
"dot(s)^2" that should be "dot(s)^3". The very next line has the same error in the expression for Cross(v,a).

23 May 2004, page 24. In the caption for Figure 2.5, the y-component of the spherical coordinates has "r" and should be "rho".

23 May 2004, page 40. The last sentence of the top paragraph should say "In Figure 2.14(c), the forces...". That is, the "(d)" should not be there.

23 May 2004, page 56. Example 2.7 should have z(t) = t^2/2. The integral for Mxy should have an integrand
(t^2/2)*sqrt(1+t^2). The approximate integral value is 199.610. The z-component of the center of mass is approximately 9.390627.

23 May 2004, page 61. In the last paragraph before Example 2.8 there is "Transpose(R)*W". The upper case "W" should be lower case "w".

23 May 2004, page 81. In Example 2.10, the integral has value 0, not 2500mg.

23 May 2004, page 84. Just an observation. The exactness test in equation (2.110) can be written as Curl(F) = 0, where Curl(F) = Cross(del,F) and del = (d/dx,d/dy,d/dz) whose components are the partial derivative operators. Since a conservative force is given by F = -del(V), Cross(del,F) = -Cross(del,del(V)) = 0.

15 May 2004, page 548. Item 10 should have "x * 1 = x", not "x * 1 = c".

01 May 2004, page 547. The sentence "The multiplicative identity of x+iy..." should be "The multiplicative inverse of x+iy..."

01 May 2004, page 134. This is a correction to my correction of 22 January 2004. The new term is "(h+s*theta-ell)^2". The plus sign in front of "ell" in the January correction is a typographical error.

09 April 2004, page 43. The correct statement of the Law of Conservation for Angular Momentum is: If the net external torque on a system of objects is zero, the angular momentum is a constant. The book says net external force, but this was in reference to the example given immediately afterwards for a particle affected by multiple external forces. In that example, the net external force of zero implies a net external torque of zero.

All entries below this point are corrected in the second printing of the book.

09 February 2004, page 59. The paragraph after equation (2.81) should say "unit-length direction vector D" instead of "non-zero direction vector D". The bold P_i should be bold r_i, the position of the i-th particle relative to the origin. The d3^2 term of equation (2.82) should have in the summation "m_i(x_i^2+y_i^2)" instead of "m_i(y_i^2+z_i^2)".

09 February 2004, page 561-562. Figure A.3 has images for Case 3(a) and Case 3(b). These should be swapped to match the cases mentioned on page 561.

09 February 2004, page 588. Axiom 6 has "cx" but should be "cv". Axiom 10 has "1*v = x" but should be "1*v = v".

09 February 2004, page 599. The second line from the bottom of the page has "1 <= <= n+1" but should be "1 <= i <= n+1".

09 February 2004, page 608. The first line of equation (A.15) should say "(cu+w) x v = c(u x v) + (w x v)". The second line should say "u x (cv+w) = c(u x v) + (u x w)".

09 February 2004, page 611. Figure A.19 has the vector p in the opposite direction that it really points (based on the right-hand rule for cross products).

22 January 2004, page 26. Equation (2.36) replaces "-r0*sigma^2*R" by "-sigma^2*R", which is incorrect. Leave the term as "-r0*sigma^2*R" in the two occurrences in the equation. The vector "-r0*sigma^2*R" is the centripetal acceleration.

22 January 2004, page 126. Figure 3.13 is labeled as if y1 and y2 are absolute locations measured from the ceiling, but they are not. The value y3 is an absolute location from the ceiling. The value y2 is the distance from the hash mark at y3 to the hash mark next to the label y2. The value y1 is the distance from the hash mark at y3 to the hash mark next to the label y1. Figure 3.15 has a similar figure, but the y1, y2, and y3 values are absolute measurements from the ceiling.

22 January 2004, page 134. The displayed equation starting with "L = T-V =" has a term "(h+s*theta-ell)" that should be "(h+s*theta+ell)^2" (the superscript 2 is missing).

22 January 2004, page 135. The displayed equation for the derivative "dot(y2)" has two occurrences of "cos". These should be "sin".

22 January 2004, page 613. The right-hand side of Equation (A.26) has a term "(u x w)v". This term should be "(u * w)v" (the cross product symbol needs to be a dot product symbol).

22 January 2004, page 679. At the end of Exercise B.4 there is the phrase "linear transformation". This should say "affine transformation".

05 January 2004, page 408. Corrections from Professor Richard W. Cottle: (1) The algorithm described in Section 7.2.1 is the Lemke algorithm, not the Lemke-Howson algorithm. I used the latter name because that is what shows up in the citation [Fri98], an online document by Joel Friedman. (2) The citation [PSC97] is listed as
Jong-Shi Pang, Richard E. Stone, and Richard W. Cottle,
The Linear Complementarity Problem,
Academic Press, San Diego, CA 1997
The correct citation is
Richard W. Cottle, Jong-Shi Pang, and Richard E. Stone,
The Linear Complementarity Problem,
Academic Press, Boston, MA 1992
The citation I used was based on information obtained by searching Amazon's site some time ago.

End of corrections that have been fixed in the second printing of the book.

Book Corrections Organized by Page Number

Odd numbered exercise solutions, Exercise 2.1. There is an expression s(t) = sqrt(1+9t^4) that should be dot(s)(t) = sqrt(1+9t^4). The dot(s) notation is the time derivative of s.

Odd numbered exercise solutions, Exercise 2.7. There is an expression for dot(u) with numerator "dot(dot(r)) - (r * u)u" but should be "dot(dot(r)) - ( dot(dot(r)) * u)u". The term dot(u) is the time derivative of u, dot(r) is the time derivative of r, and dot(dot(r)) is the second derivative of r with respect to time.

Odd numbered exercise solutions, Exercise 2.11. The E5 edge inertia tensor table components Iyy and Izz are reversed, as are those for the F2 face inertia tensor table. The dS expression has lambda that should instead be
c*sqrt((1/a)^2+(1/b)^2+(1/c)^2).

Section 2.2.1, page 22. The displayed equation for dot(a) just before equation (2.25) has an error. The B term has a
"dot(s)^2" that should be "dot(s)^3". The very next line has the same error in the expression for Cross(v,a).

Section 2.2.1, page 24. In the caption for Figure 2.5, the y-component of the spherical coordinates has "r" and should be "rho".

Section 2.2.1, page 26. Equation (2.36) replaces "-r0*sigma^2*R" by "-sigma^2*R", which is incorrect. Leave the term as "-r0*sigma^2*R" in the two occurrences in the equation. The vector "-r0*sigma^2*R" is the centripetal acceleration.

Section 2.2.1, page 26. In the section "Motion About a Moving Axis", the sentence "The initial position r0 = r(0) = r0*xi" should instead have "r0 = r(0) = r0*xi + h0*D" (where xi denotes the greek letter).

Section 2.4.5, page 40. The last sentence of the top paragraph should say "In Figure 2.14(c), the forces...". That is, the "(d)" should not be there.

Section 2.5.2, page 43. The correct statement of the Law of Conservation for Angular Momentum is: If the net external torque on a system of objects is zero, the angular momentum is a constant. The book says net external force, but this was in reference to the example given immediately afterwards for a particle affected by multiple external forces. In that example, the net external force of zero implies a net external torque of zero.

Section 2.5.3, page 56. Example 2.7 should have z(t) = t^2/2. The integral for Mxy should have an integrand
(t^2/2)*sqrt(1+t^2). The approximate integral value is 199.610. The z-component of the center of mass is approximately 9.390627.

Section 2.5.4, page 59. The paragraph after equation (2.81) should say "unit-length direction vector D" instead of "non-zero direction vector D". The bold P_i should be bold r_i, the position of the i-th particle relative to the origin. The d3^2 term of equation (2.82) should have in the summation "m_i(x_i^2+y_i^2)" instead of "m_i(y_i^2+z_i^2)".

Section 2.5.4, page 60. The change on this page is a consequence of the change "22 January 2004, page 26", where
  a(t) = -r0*sigma^2*R + Cross(alpha,r)
is the correct equation for the acceleration. In the paragraph before equation (2.88), the acceleration formula needs to be replaced by the one mentioned above. This affects the construction in equation (2.89). That equations turns out to be
tau = J*alpha + Cross(w, -m*sigma*h0*r)
The similarity between F = m*a and tau = J*alpha occurs when h0 is zero. However, in the more general case when h0 is not zero, the cross product term has a contribution. Using J as defined in the displayed equation after equation (2.88), some algebra will show that
tau = J*alpha + Cross(w, J*w)
which in fact is equation (2.90) since alpha = dw/dt is the angular acceleration mentioned on page 25.

Section 2.5.4, page 61. In the last paragraph before Example 2.8 there is "Transpose(R)*W". The upper case "W" should be lower case "w".

Section 2.5.5, page 69. In the display equation for the double integral of p(x,y), the middle integral should be over R, not over L.

Section 2.6.1, page 81. In Example 2.10, the integral has value 0, not 2500mg.

Section 2.6.2, page 83. The displayed equation for work W2 has "(t,-t,0) * (1,2t,0)". It should be "(t^2,-t,0) * (1,2t,0)" and the work is W2 = -1/3.

Section 2.6.1, page 84. Just an observation. The exactness test in equation (2.110) can be written as Curl(F) = 0, where Curl(F) = Cross(del,F) and del = (d/dx,d/dy,d/dz) whose components are the partial derivative operators. Since a conservative force is given by F = -del(V), Cross(del,F) = -Cross(del,del(V)) = 0.

Section 3.1, page 93. Equation (3.4) is missing a 2 in front of the last occurrence of Cross(w,r0).

Section 3.2.1, page 106. The paragraph before the final set of displayed equation has the kinetic energy stated incorrectly. It should be
T = m*(dot(x1)^2 + dot(x2)^2)/2
The dots are missing and the division by 2 is missing.

Section 3.2.1, page 113. The right-hand side of the F_theta eqaution is missing an r factor. It should be
= r*(-mg*sin(theta) + Dot(C,T))

Section 3.2.5, page 126. Figure 3.13 is labeled as if y1 and y2 are absolute locations measured from the ceiling, but they are not. The value y3 is an absolute location from the ceiling. The value y2 is the distance from the hash mark at y3 to the hash mark next to the label y2. The value y1 is the distance from the hash mark at y3 to the hash mark next to the label y1. Figure 3.15 has a similar figure, but the y1, y2, and y3 values are absolute measurements from the ceiling.

Section 3.2.5, page 126. The third paragraph has "m1*(dot(y3)^2+dot(y1)^2)/2" when it should be "m1*(dot(y3)+dot(y1))^2/2". The next line has similar mistakes and should be "m2*(dot(y3)+dot(y2))^2/2 = m2*(dot(y3)-dot(y1))^2/2".

Section 3.2.6, page 134. The displayed equation starting with "L = T-V =" has a term "(h+s*theta-ell)" that should be "(h+s*theta+ell)^2" (the superscript 2 is missing).

Section 3.2.6, page 135. The displayed equation for the derivative "dot(y2)" has two occurrences of "cos". These should be "sin".

Section 4.3.1, page 177. The line right before the "Point X(float u)" pseudocode mentions "... compute N_{i,2} for ...". This should be "... compute N_{i,2}(t) for ..."

Section 4.3.1, page 179. The pseudocode has as part of an expression "* fInvD0". This should be deleted. The equation is
basis[j][k] = c0*basis[j-1][k] + c1*basis[j-1][k+1]

Section 5.1, page 226. Quite a few typographical errors in equation (5.7). It should be
J(t) = integral_B (|r|^2 - r r^T) dm
      = integral_B (|Rb|^2 I - (Rb)(Rb)^T) dm  // T was in wrong place
      = integral_B (|b|^2 I - R b b^T R^T) dm
      = integral_B (|b|^2 R R^T - R b b^T R^T) dm
      = R (integral_B (|b|^2 I - b b^T) dm) R^T  // I was missing, extra R was in integrand
      = R(t) J_body R(t)^T

Section 5.2.2, page 247. The large right parentheses in equations (5.23) and (5.24) should be to the right of r_A and r_B. Inside the parentheses should be
N0/mA + JA^{-1}*(rA x N0) x rA
and
N0/mB + JB^{-1}*(rB x N0) x rB

Section 5.2.2, page 248. The pseudocode has a line starting with "double fNumer". The last term should be "Dot(B.w,kB)" instead of "Dot(B.w,kA)".

Section 5.2.2, page 253. In equation (5.28), the conditions for the integral to be g(x0,y0) should be
  x1 <= x0 <= x2,  y1 <= y0 <= y2

Section 5.2.2, page 260. The displayed equation for the angular velocity should be
w_A^{+} = w_A^{-} + J_A^{-1}*(f0*Cross(r0,N0) + f1*Cross(r1,N1))

Section 5.2.2, page 261. The third line from the top of the page has "as close to dot(d)_i as possible". The underscore denotes a subscript. This is missing a superscript minus sign and should be "as close to dot(d)^{-}_i". The carat denotes a superscript.

Section 5.2.2, page 263. In the last paragraph of the example, the one at the end of the block with the gray line on the left, the summation index is i but should be j.

Section 5.2.3, page 268. In the second group of displayed equations (for torque resolution), the superscript on the r term in "g_4 * r^1_A x N_4" term should be a 4, not a 1. That is, "g_4 * r^4_A x N_4".

Section 5.2.4, page 273. The pseudocode at the top of the page has arithmetic updates with the wrong signs. It should be
  if ( ci.B == cj.A )
  {
      A[i][j] -= ci.B.massinv * Dot(ci.N, cj.N);
      A[i][j] -= Dot(rBNi, ci.B.jinv * rBNj);
  }
  else if ( ci.B == cj.B )
  {
      A[i][j] += ci.B.massinv * Dot(ci.N, cj.N);
      A[i][j] += Dot(rBNi, ci.B.jinv * rBNj);
  }
This appeals to the symmetry of the situation.

Section 5.2.4, page 274. The pseudocode in the top part of the page has a line of code for computing b[i]. The last part of that equation has Dot(Ndot,At4-Bt4), but is missing a two and should be 2*Dot(Ndot,At4-Bt4).

Section 5.3.2, page 290. The first paragraph after the top block of pseudocode should start with "In the worst case, the polygons intersect." That is, there are no early returns of "false" in the TestIntersection function.

Section 5.3.2, page 292. The last statement for edge E[i] to be optimal should have the conditions
Dot(perp(N[i]),D) = 0 and Dot(perp(N[i-1]),D) < 0
That is, the indices needed to be adjusted.

Section 5.3.3, page 318. The first line of pseudocode in the function NoIntersect has "Cfg1". It should be "info1".

Section 7.1.3, page 397. The displayed equation for g(w) should have a_{ij} instead of a_{ji}.

Section 7.2.1, page 408. Corrections from Professor Richard W. Cottle: (1) The algorithm described in Section 7.2.1 is the Lemke algorithm, not the Lemke-Howson algorithm. I used the latter name because that is what shows up in the citation [Fri98], an online document by Joel Friedman. (2) The citation [PSC97] is listed as
Jong-Shi Pang, Richard E. Stone, and Richard W. Cottle,
The Linear Complementarity Problem,
Academic Press, San Diego, CA 1997
The correct citation is
Richard W. Cottle, Jong-Shi Pang, and Richard E. Stone,
The Linear Complementarity Problem,
Academic Press, Boston, MA 1992
The citation I used was based on information obtained by searching Amazon's site some time ago.

Section 8.1, page 439. The displayed equation after equation (8.3) has an extra x0 term. The first x0 should be deleted, so the equation should be
x(t) = exp(...)*[x0 + ...]

Section 8.3, page 443. The sentence "Finally, the quadratic equation can have a repeated root..." has a condition "when b = a^2/4". This should be "when b = -a^2/4".

Section 9.8.3, page 481. The interval for the drag coefficient should be [0,1] (closed) rather than [0,1) (half-open).

Section 9.9.3, page 499. Before the last displayed equations, there is "replacing y_{i+j} by z_j", where the underscore means "subscript". This should be "replacing y_{i+j} by z^j, where the carat means "superscript". That is, the subscript j on the z-term should be a superscript.

Section A.2.2, page 555. In Example A.5, the second equation should be "x1 + 2*x2 + 2*x3 = 11". The book incorrectly lists the coefficient of x2 as 3.

Section A.2.4, page 561-562. Figure A.3 has images for Case 3(a) and Case 3(b). These should be swapped to match the cases mentioned on page 561.

Section A.4.1, page 588. Axiom 6 has "cx" but should be "cv". Axiom 10 has "1*v = x" but should be "1*v = v".

Section A.4.3, page 599. The second line from the bottom of the page has "1 <= <= n+1" but should be "1 <= i <= n+1".

Section A.4.5, page 608. The first line of equation (A.15) should say "(cu+w) x v = c(u x v) + (w x v)". The second line should say "u x (cv+w) = c(u x v) + (u x w)".

Section A.4.5, page 611. Figure A.19 has the vector p in the opposite direction that it really points (based on the right-hand rule for cross products).

Section A.4.5, page 613. The right-hand side of Equation (A.26) has a term "(u x w)v". This term should be "(u * w)v" (the cross product symbol needs to be a dot product symbol).

Section A.5.1, page 637. The entry in the upper-left corner of the inverse matrix should be a22*a33-a23*a32.

Section B.5.1, page 679. At the end of Exercise B.4 there is the phrase "linear transformation". This should say "affine transformation".