﻿ Errata for CA

## Errata for 2nd edition of Computer Animation: Algorithms and Techniques by R. Parent

A special thanks to Dr. Philip Schlup of Colorado State University, Dr. Brian Wyvill of the University of Calgary, and Dr. Przemyslaw Kiciak of the University of Warsaw for their comments and corrections.

CHAPTER 1: Introduction
Page Location Comment
7 Section 1.22, 2nd paragraph "1985" should be "1895"

CHAPTER 2: Technical Background
Page Location Comment
45-46 Eq. 2.3 & Eq. 2.4 The equal sign ('=') should be a symbol that indicates equivalence; it should be replaced with '&equiv'.
52 First line after Eq. 2.17 The rotation matrices are transposed. The transformation of the point P should be: P'=RyRxP
56 The third sentence of the section titled "Perspective Matrix Multiply"
• "Zetan&theta" should be "Zetan&theta"
• change
... and &phi is the half-angle of view."
to
"... and &phi is the half-angle of view - the angle made by the view direction and each of the planar surfaces of the view frustum (assumes the frustum has an aspect ratio of 1, i.e., a square cross section).
68 Eq. 2.29 Change to
```QuatRot(&theta,(x,y,z)) &equiv [cos(&theta/2), sin(&theta/2)(x,y,z)]
```
69 Eq. 2.30 Change to
```q &equiv Quatrot(QuatRot(&theta,(x,y,z))
= [cos(&theta/2), sin(&theta/2)(x,y,z)]
= [cos(-&theta/2), -sin(&theta/2)(-x,-y,-z)]
= [cos(-&theta/2), sin(-&theta/2)(-x,-y,-z)]
&equiv Quatrot(-&theta,-(x,y,z)) &equiv -q
```
69 Eq. 2.33
• The 'p' in the equation that should be a 'q'
• The first rotation, which looks like:
```Rotq-1
```
should be:
```Rotq-1
```

CHAPTER 3: Interpolation
Page Location Comment
82 4th sentence of 2nd paragraph Change
"... to parameterize by arclength."
to
"... to find a closed algebraic formula to describe a parameterization by arclength."
85 Eq. 3.10, second line should be:
```  = 0.944 + ((0.73-0.70)/(0.75-0.70))(0.959 - 0.944)
```
87 parenthetical 4th sentence This comment, the sentence inside the parentheses, can be ignored because the entries will be output in sorted order by the routine.
88 End of the first paragraph Add to the end of the paragraph:
"In addition, because Gaussian quadrature requires continuous derivatives to be accurate, it should only be applied to the polygonal segments of a piecewise-smooth curve definition."
88 Eq. 3.13 The integral needs the integrating variable 'du'
89 Above Eq. 3.14 To the end of the sentence above Eq. 3.14, add:
"... for arbitrary limits a and b."
92 function add_table_entry() at the bottoom of the page Note that the functionality of actually building the table is left as an exercise for the reader - the code here merely prints out the entry.
93 near top of code Entry w should be .2955242247
93 function evaluate_polynomial() at the bottom of the page For efficiency, as well as accuracy, the code for the evaluation of the polynomial should be replaced by Horner's method:
```double evaluate_polynomial(polynomial_td *poly, double u)
{
int            i;
double     value;

value = poly->coeff[poly->degree];
for (i=poly->degree-1; i >= 0; i--) {
value = poly->coeff[i] + u*value;
}
return value;
}
```
94 End of second sentence of the section titled Finding u Given s Change 'integral' to 'interval.'
96 middle of 2nd full paragraph Change
".. at a speed indicated by S(t)"
to
".. at a speed determined by S(t)"
100 functiion ease() at the top of the page For consistency, the use of 'float' in this function should be changed to 'double'
103 the first line of Eq. 3.21 Replace this wordy equation by modifying the last sentence of the paragraph above it. Change
"The area under the velocity curve can be computed as in Equation 3.20.
to
"The normalized area under the velocity curve can be computed, as in Equation 3.20, by setting 1 equal to the area under the leading ramp plus the area under the middle constant velocity interval plus the area under the trailing ramp.
107 last sentence Change
"... order k with n+1 ..."
to
"... order k (degree k-1) with n+1 ..."
107 footnote Change the reference from 'B.5' to 'B.5.12'
109 Eq. 3.26 & 3.27 It should be noted that actually computing the inverse, as in Eq. 3.26 or the psuedoinverse, as in Eq. 3.27, is not recommended. One of the more numerically stable algorithms for solving such systems of equations should be used instead. For example, refer to Numerical Recipes (reference  in Appendix B).
111 Eq. 3.29 In the first term on the right, the 'sin' should be in the numerator and &theta should be mulitplied by '1-u'. So the numerator should be:
```sin((1-u)*θ)
```
111 Eq. 3.29 As an aside, slerp expressed in terms of quaternion algebra  is:
```Slerp(q0,q1,u) = q0(q0-1q1)u
where qu =  [cos(uθ), v*sin(uθ)]
and v is a 3D unit vector
```
113 Eq. 3.30 Note that the construction of the new bn&prime would remove C1 continuity at pn - unless a new an&prime was similarly displaced. However, the construction of bn&prime, with or without the continuity enforcement, may still provide useful functionality to an animator as a design tool in constructing a path.
113 2nd full paragraph Adapting control point construction for Bezier interpolation to quaternions needs more explanation. In order to do the quaternion-equivalent of the fist step of Figure 3.25, use the following:
```
double(p,q) = 2*(p⋅q)q - p
```
to produce a quaternion that is twice as far away from p as q is and in the same direction from p as q is.
113 2 places in the 3rd full paragraph "De Casteljau" should be "de Casteljau"
114 pseudo-code for computing u = 1/4 The right-hand sides of all the lines should include the normalization by dividing the quaternion sum by its length.
For example,
```temp = slerp(qn,an,1/2) = qn + an
```
should be
```temp = slerp(qn,an,1/2) = (qn + an) / ||qn + an||
```
115 Figure 3.30 The 'u' vector should be pointing the opposite direction (to the right of the plane's pilot) in order to complete the left-hand coordinate system.
123 first full sentence Change
".. can be used to solve for the position P1 = P(1/3)"
to
".. can be used to solve for the position P(1/3)"
127 Middle of second full paragraph Note that the cutting plane can be defined as that containing the normal of the triangle (or polygon) to be intersected.
128 2nd full paragraph, last sentence "In this manner, finding the path reduced into..."
should be:
"In this manner, finding the path is reduced into..."
 Andrew J. Hanson Visualizing Quaternions, Morgan-Kaufmann, San Fransisco, 2006. (p. 103)

CHAPTER 4: Interpolation-Based Animation
Page Location Comment
148 Fig. 4.18
• The equations are for a bend in the y-z plane while the plot shows a bend in the x-z plane
• On the right, the conditional equations for &theta should have a new first line of '= 0 z The third equation should be for z: "z' = ..."
151 First line Stating that there are 'l points in the S direction, m points in the T direction, and n points in the U direction,' does not count the origin of the grid in those directions. Counting the origin there are l+1 points in the S direction, etc.
151 Eq. 4.8 The term:
```(1-t)m-jtj
```
should be:
```(1-t)m-jtj
```
That is, (1-t) is raised to the power m-j. This is multiplied by t is raised to the power t
151 Last sentence Change
"As with Bezier curves, C1 continuity can be ensured between two FFD contro grids by enforcing colinearity among adjacent control point across the common bounday (Figure 4.22)"
to
"As with Bezier curves, C1 continuity can be ensured between two FFD control grids by enforcing colinearity among adjacent control points across the common boundary as well as the adjacent control points being equidistant from the common boundary point. (Figure 4.22)"
152 Footnote The word 'note' should be 'node'
164 Middle of first full paragraph Change "surface of the sphere" to the more technically correct "spherical surface"
171 top of page Add a reference to Wolberg's book, , to the end of the first sentence.
Change:
"... user-defined coordinate grids superimposed on each image."
to:
"... user-defined coordinate grids superimposed on each image ."
171 Fig. 4.44 The description of grid-based morphing constructs the auxilliary grid the wrong way. It should use the y-coordinate of the source grid and the x-coordinates of the intermediate grid. Figure 4.40 should be changed as well.
175 Eq. 4.9 There should be no parentheses around the rest of the equation after the first &alpha:
```C[i][j] = αC1[i][j] + (1+&alpha)C2[i][j]
```
175 Last paragraph, first sentence "... by the user-defining coordinate grids ..."
should be:
"... by the user-defined coordinate grids ..."
179 Eq. 4.10 'W' and 'P' should be lower case to agree with the usage in the text

Page Location Comment
197 Section 5.1.2 In the middle of the first paragraph, changeBR> "Successively applying the inverses of matrices farther up the hierarchy can transform a point from any ..."
to
"Successively applying the matrices farther up the hierarchy can transform a point from any ..."
199 traverse() pseudo-code
• Toward the bottom of the code in three places, replace "->arc" with "->arcPtr"
• At the bottom of the code, replace "pop(matrix)" with "matrix = pop()"; also, in the middle of the code, "matrix = Pop()" should be "matrix = pop()"
202 Fig. 5.15
• In the first equation,
```acos(...) = ....
```
should be:
```cos(...) = ...
```
However, it would more direct to use tangent:
```tan(&thetaT) = Y/X
```
and therefore use arctangent in the second line. However, because of the ambiguity that results due to Y/X = -Y/-X, it is better to use a two-argument arctangent function if one is available:
```&thetaT = atan2(Y,X)
```
• In the last equation in the figure, the numerator on the right contains:
```-X2+Y2
```
and it should be:
```-(X2+Y2)
```
203 Eq. 5.7 The 'fi' in the first term on the right side of the equation should be 'fi'
203 Eq. 5.9 The δY on the left side of the equation and the δX at the end of the right side are differentials and therefore should be written with a 'd' to distinguish them from the partial derivative of δF over δX
203 Last paragraph The dimensions used in the example are arbitrary, so the text that says:
"The 6 X 6 matrix of partial derivatives, ..., is called the Jacobian ..."
should not be taken to mean that Jacobians are always 6 X 6. It would be better to say simply that a matrix of partial derivatives is called the Jacobian and note that it is often not square.
204 First sentence Change:
"At any point in time, the Jacobian is a linear function of xi."
to
"At any point in time, the Jacobian is a function of xi."
204 Eq. 5.11 Y is a column vector and, therefore, equal to the transpose of the vector shown:
```Y = [px,py,pz,αx,αy,αz]T

```
204 Eq. 5.15 The partial derivatives should be with respect to &theta, not θ-dot
207 Second paragraph "A vector of the desired change in values is set equal to the Jacobian matrix multiplied by a vector of the unknown values, which are the changes to the joint angles (Equation 5.16)."
should be:
"A vector of the desired change in values is set equal to the Jacobian matrix (Equation 5.17) multiplied by a vector of the unknown values, which are the changes to the joint angles."
207 Eq. 5.17 The spacing between and within terms is confusing. This should be a 3 X 3 matrix. Each term ends with a subscript of 'x', 'y', or 'z'.
208 Eq. 5.20 and the text that follows Eq. 5.20 shows a derivation for J+ from the inverse kinematic equation that is easy to understand mathematically. However, in the rest of the text, the transpose of this definition is what is used for the pseudo-inverse of the Jacobian. It is easy to show that these two forms are equal if both (JTJ)-1 and (JJT)-1 exist. i.e.:
```J+ = (JTJ)-1JT = JT(JJT)-1
```
Typically it is the case in inverse kinematics formulations that the columns are not linearly independent, but the rows are (i.e., there are more joints than necessary). This means that (JTJ)-1 does not exist, but (JJT)-1 does. As a result, we use the form of the pseudo-inverse that has the term (JJT)-1. This should be explained in the text or put in a footnote.
211 Fig. 5.21 The left half of the x-axis is labeled:
``` 230, 220, 210
```
It should be labeled:
``` -30, -20, -10
```
213 Fig. 5.23 The figure's text starts with:
"Inverse of the Jacobian solution formulated to pull the target toward the goal ..."
"Inverse of the Jacobian solution formulated to pull the goal toward the end effector ..."
213 First sentence of last full paragraph on page Change the reference to
Figure 5.23
to
Figure 5.24
215 Reference #1 "Dampled" should be "Damped"

CHAPTER 6: Motion Capture
Page Location Comment
227 example hierarchy information The indentation is missing that shows the hierarchical relationship. It should read as:
```  root
joint Chest offset 0 5.21 0
3 DOFs: Zrotation Yrotation, Xrotation
Limits: (-180,180)  (-90,90) (0,270)
joint Neck
offset 0 5.45 0
3 DOFs: Zrotation Yrotation, Xrotation
...
joint Left UpperLeg
offset 3.91 0.0 0.0
3 DOFs: Xrotation Yrotation, Zrotation
joint LeftLowerLeg
offset 3.91 0.0 0.0
1 DOF: Xrotation
...
```
229 Middle of 3rd paragraph Change
```θ(t) = f(&theta,t)
```
to
```θ′(t) = f(&theta,t)
```
231 Reference 3 The title should be: "Motion Graphs"

CHAPTER 7: Physically Based Animation
Page Location Comment
234 Last sentence on page Change:
"... the object's acceleration can be calculated based on the object's mass, the time interval, and Equation 7.1 to produce Equation 7.2."
to:
"... the object's acceleration can be calculated using Equation 7.1 to produce Equation 7.2."
235 Eqs. 7.4 The notation here uses 'p' for position. Later in the text 'x' is used for position and 'p' is used for momentum. For consistency, the positional notation used here should be 'x'.
235 Eq. 7.6 The denominator, re, should be squared: re2
236 First full paragraph This discussion should be independent of whether or not the damper is used in conjunction with a spring.
• Change:
"The damping force of a spring ..."
to:
"The damping force ..."
• Change"
"... velocity of the spring length ..."
to:
"... velocity of the distance between the objects ..."
• Change:
"... to a change in spring length ..."
to:
"... to a change in the distance between the objects ..."
236 Eq. 7.11 For consistent notation, the &omega should be an &alpha:
```&tau = I&alpha
```
237 End of the first paragraph At the end of the paragraph, add the following sentence:
"Below, is a single spring-damper equation formed by combining Equations 7.7 and 7.8"
Also, change the plus sign to a negative sign to be consistent with Equation 7.8.
240 Figure 7.2 Figure 7.2 should be changed to show the spring and damper working in parallel on the masses.
244 code at bottom of page Change:
```typedef particle_struct struct {
```
to:
```typedef struct particle_struct {
```
245 code at top of page Change:
```typedef particleSystem_struct struct {
```
to:
```typedef struct particleSystem_struct {
```
245 second code segment To make this code more C-like, a ';' should be added at the end of each line.
Also, change:
```addVector(array2,array2,array2,n)
```
to:
```addVector(array1,array1,array2,n)
```
253 Eqs. 7.25
• In the left column vector, the second element should be negated.
• In the first row of the 3 X 3 matrix, the second element should be -Az
• The third equal sign should be removed
255 Eqs. 7.34 & 7.35 &taut should be &taui
256 Eq. 7.40 The quantities q(t) and q-dot) should be indexed by i
260 Eq. 7.52 Change:
```E(p) = ax + by + cz + d
```
to:
```E(p) = apx + bpy + cpz + d
```
Also, the text above should say that E(p)=0 is the planar equation where p = (px, py, pz)
261 Figure 7.16 Change:
"... for the example from Section 4.1"
to:
"... for the example from Section 7.4.2"
261 Equation 7.54 Should be:
```v(tt+1) = v(tt) - (v(tt)⋅N)N + k*(v(tt)⋅N)N
= v(tt) + (k-1)*(v(tt)⋅N)N```
266 first partial sentence on page Change:
".. then the upper bound is replaced with the middle of the time interval. Otherwise, the lower bound ..."
to:
".. then the lower bound is replaced with the middle of the time interval. Otherwise, the upper bound ..."
267 Second line
• The inequality should be:
```0≤ε≤1
```
• Note that 'k' was used as the coefficient of restitution in the case of directly modifying the normal component of velocity whereas &epsilon is used here in the discussion of computing the impulse force of collision.
• It is also worth noting that if the coefficient is less than unity, the collision is inelastic and kinetic energy is not conserved.
267 Last sentence of the first paragraph Change:
"These equations use the impulse, j, and ..."
to:
"These equations use the impulse, j (where J=jn), and ..."
268 Eq. 7.59 The second term in brackets should be pB with a dot over it:
```vrel = (pA(t) - pB(t))n
```
where each 'p' should have a dot over it.
268 Eqs. 7.59 & 7.63 The quantity in parentheses should be dotted with n and then multiplied by n
268 Eq. 7.60
• In the first line, the second '=' should be a '+'
• In the second line, the 'w' should be &omega
268 Equations 7.61 & 7.62 In each pair of equations, one of the pair should the term subtracted instead of added.
269 Eq. 7.64 The last '+'should be a '-'
269 Eq. 7.65 In the denominator,
• the last plus sign '+', should be a '-'
• the n should be a dot product with then entire rest of the denominator
269 Fig. 7.24
• The second line should be:
```Compute Vrelative = dot(N,(VA-VB))   ; Eq. 7.63
```
• The 3 equations cited in the comments (which includes the line above) should be:
```Eq. 7.60, Eq. 7.63, and Eq. 7.65
```
• The first 'else' statement should be:
```else if Vrelative &ge -threshold
```
271 First sentence on page "Computing the forces involved in resting contact ..."
should be:
"Computing the forces involved in continuous contact ..."
272 Eq. 7.75 The summing index should be 'j'
276 Eq. 7.84 the 'x' in the bottom element of the vector should be cross-product, ' X '
276 Eq. 7.85 The lower left term in the 3x3 matrix should be '-ry' instead of 'ry'
278 Figure 7.31 This is not a good figure to show the gradient. Perhaps better would be to show a topologic map and draw the gradient vector relative to the contours.
280 all equations on page Pq should be Pa
282 Eq. 7.92 On the left side of the equation, there should be a double-dot over 'x' indicating second derivative
283 Eq. 7.97 & 7.98 The summation should be over j, not i

CHAPTER 8: Fluids: Liquids & Gases
Page Location Comment
292 Eq. 8.1
```f(x,t)
```
should be
```f(s,t)
```
293 last sentence of first paragraph Change:
"... where H is defined as half of the amplitude."
to:
"... where H is defined as twice the amplitude."
295 Eq. 8.6 the term:
```&thetai(x,y,t0)
```
should be:
```&thetai(x,z,t0)
```
295 Eq. 8.7 The left hand side of the equation should be:
```&thetai(x,z,t0) = xi/Li
```
300 Figs. 8.9 The references to equations in the pseudo-code should have 13 added to them:
• The reference to Equation 8.10 should be to Equation 8.23
• The reference to Equation 8.13 should be to Equation 8.26
302 & 304 Figs. 8.10 & 8.11 The images are swapped.
306 1st paragraph With respect to the implicit spheres mentioned, a cross-reference to Section 12.1 Implicit Surfaces, p. 421 should be added.
305 Equation 8.27 It should be noted that F(r) is equal to zero for values of r > R
308 pseduo-code Towards the bottom in the calculation of theta, there is a missing decimal point:
```01047196
```
should be
```.01047196
```
310 first sentence on page In listing "... speed, initial velocity...", the text is redundant in that the velocity (a vector) includes the speed (a scalar).
312 2nd paragraph, fourth line "... based on the indice of the surrounding pixels ..."
should be:
"... based on the indices of the surrounding pixels ..."
314 2nd paragraph of Section 8.2 The reference , at the end of the 2nd paragraph of Section 8.2, is incorrect and should be ignored.
317 Last paragraph For F=[Fx, Fy, Fz],
```δF/δx + δF/δy + δF/δz
```
should be:
```∂Fx/∂x + ∂Fy/∂y + ∂Fz/∂z
```
318 Equation 8.34 For F=[Fx, Fy, Fz],
```∇•F = δF/δx + δF/δy + δF/δz
```
should be:
```∇•F = ∂Fx/∂x + ∂Fy/∂y + ∂Fz/∂z
```
318-320 Equations involving &delta The &delta character should be replaced with &part
318 Use of gradient and divergence It should be noted that the gradient operator is usually applied to a scalar function and the divergence is a property of a vector field. There should be a distinction in the notation I use when referring to a scalar field (e.g. F) and a vector field (e.g. F)

CHAPTER 9: Modeling and Animating Human Figures
Page Location Comment
334-5 Throughout The references to Chapter 4 (with respect to linkages and degrees of freedom) should be to Chapter 5.
355 Figure 9.32 The curve to be removed is the lower of the two as it says in the text. However, in the diagram on the left, the line pointing to the curve to be removed is ambiguous - it should be more obvious that it is pointing to the lower of the two curves.
354-7 Section 9.4.2 This discussion assumes a fixed length between the two constrained vertices. This should be made explicit in the discussion.
358 Equation 9.4 The factor, ks, should be applied to the entire expression on the right-hand side, not just the first term in the numerator.

CHAPTER 10: Facial Animation
Page Location Comment
374 Last full paragraph In the second last sentence of the last full paragraph on the page, change 'modified' to 'added'.
378 Second last paragraph Change:
Facial anthropomorphic statistics and proportions ..."
to:
Facial anthropometric statistics and proportions ..."
388 Section 10.4.2, 2nd paragraph, 1st line 'Visemes' is an accepted term in the literature, but hasn't made into the dictionary (as far as I can tell) so there is no official reference for hyphenation, but it is probably hyphenated wrong here. It should probably be 'vi-semes.'
389-390 Section 10.5 This is a repeat of Section 9.5. The summary for this chapter has been lost in the ether. Look for it in the next edtion.

CHAPTER 11: Modeling Behavior
Page Location Comment
394 Last sentence on page Change:
"Using the characters position ..."
to:
"Using the character's position ..."
405 Fig. 11.5 This section is a bit confusing.
"... adjusting bucket positions of any members that deviate too much from the bucket center ..."
refers to changing the bucket assignment of a flock member whose position changes relative to bucket centers. Perhaps better is:
"... adjusting bucket assignments of any members that deviate too much from the bucket center ..."
405 Fig. 11.5 In the equation for 't', the term under the radical sign should be: s2 + k2
401 End of the last full paragraph Change:
"If less that the amount of total possible control is not allocated, ..."
to:
"If less that the amount of total possible control is allocated, ..."
402 Several places in the text Change:
'model'
to:
'module'
406 Fig. 11.6
• In the equation for 't', 'K' should be 'k'
• In the 5th line of the equation, there is a left parenthesis that should not be there.
406 First sentence Change;
"... then this point can be steered toward Figure 11.7."
to:
"... then this point can be steered toward the closest point on a silhouette edge (Figure 11.7)."
407 Figure 11.8 This should show the pitch rotation in the other direction so that an increase in pitch results in an increase in the angle of attack, as stated on the following page
408 Middle of the first full paragraph Change:
"A flying object turns by being lifted sideways by the vertical component of the lift; ..."
to:
"A flying object turns by being lifted sideways by the horizontal component of the lift; ..."
418 Reference #23 Change:
"New Zealand Trave & Enterprise"
to:

CHAPTER 12: Special Models for Animation
Page Location Comment
421 First sentence of 12.1 In:
"... some equation f(p) = 0, called the implicit function."
the implicit equation is f(p)=0, whereas the implicit function is f(p).
422 Eq. 12.1
• The sign of the s4 term should be positive
• There parenthesis around the s6 term is not necessary
422 Last sentence on page The text says:
"... f(0.0) = 0.0 ... f(1.0)=1.0 ..."
it should be:
"... f(0.0) = 1.0 ... f(1.0)=0.0 ..."
427 End of partial paragraph at top The F1 and F2 should be changed to Fi and Fj, respectively.
428 12.1.5, 1st paragraph, 2nd last sentence Change:
d&phi2/d2t
to:
d2φ/dt2
435 Figure 12.14 In the figure for the middle terminal string, the side branch should have 3 equally spaced dots.
437 Context-Free versus Context Sensitive Section Change:
"Productions with shorter contexts are usually given precedence over productions with longer contexts ..."
to:
"Productions with longer contexts are given precedence over productions with shorter contexts ..."

APPENDIX A: Rendering Issues
Page Location Comment
450-451 Bottom of p. 450, top of p. 451 On page 450 at the bottom:
"The combined scene is anti-aliased ..."
and on page 451 on the first line,
"Each scene is anti-aliased ..."
In both cases, it the image that is anti-aliased, not the scene.
451 Last sentence of top partial paragraph Change:
"The over operator, as defined above, ..."
to:
"The over operator, as defined below, ..."
456 Last paragraph, in the middle
• "If f is the corner surface, then the coverage is &beta = (s+t)/2"
Because coverage is a triangle, the area is:
``` &beta = st/2
```
• "If b is the corner surface, then &beta = 1.0 - (s+t)/2"
the coverage should be:
```&beta = 1 - st/2
```

APPENDIX B: Background Information and Techniques
Page Location Comment
470 Eq. B.3
• Change:
Cij = ...
to:
Cij = ...
• The sum over the term:
```AjkBkj
```
should be:
```AikBkj
```
471 Eq. B.5 In the matrix on the right side of the equation, the second element of the first row should be 'd'
471 B.8 This is the equation for a determinant. The notation for determinant is to bracket the matrix with straight vertical lines instead of the square matrix brackets shown here.
473 B.12 In the line after the line labeled with 'Third row:', remove the dot:
```L31⋅y1
```
should be :
```L31y1
```
484 Vector.c code
```typedef  struct  xyz_struct {
float    x,y,z;
xyz_td;
}
```
should be:
```typedef  struct  xyz_struct {
float    x,y,z;
} xyz_td;
```
484 crossProduct code The variable definition:
```xyz_tdp;
```
should be:
```xyz_td  p;
```
485 dotProduct code
(starting on previous page)
the '=' in the return statement should be '+'
485 formVector code The variable definition:
```xyz_tdp;
```
should be:
```xyz_td  p;
```
486 Vector4Matrix4x4Mult code
ComputeInverse4x4 code
Remove the spaces surrounding the 'x' in the function names
487 ComputeInverse4x4 code
(starting on previous page)
The matrix A and its rows, allocated by malloc, are never freed. Appropriate code should be added at the end of the routine.
488 First full paragraph, last sentence Change:
"For triangles in two-dimensional, ... "
to:
"for triangles in two dimensions, ..."
492 Under Bounding Slabs, 2nd paragraph "In the planar equation ax + by + cy = d, ..."
should be:
"In the planar equation ax + by + cz = d, ..."
511 Eq. B.57
```Rot[0,x,y,z]
```
should be:
```Rot[θ,x,y,z]
```
512 Eq. B.59 The first term in the third row of the matrix is:
```2xy-2sy
```
It should be :
```2xz-2sy
```
553 Eq. B.141
• The second term of the third row of the 3x3 matrix should be -Iyz instead of Iyz.
• In the first integral (Ixx), each of y and z should be squared
554 Eq. B.146 In the third term of the second row and the second term of the third row should be:
```-Iyz - MYZ
```
(note that there is no need for the paretheses around the terms that only involve multiplication such as MYZ and MXY)
560 The Verlat Method In both the title and first sentence, "Verlat" should be "Verlet."
571 Eq. B.159 In the second line:
```r - r0 = svvi
```
should be:
```ri - r0 = svvi
```
572 Eq. B.161 In the second of the two equations:
• The numerator of left side of the equation is:
```ui
```
It should be:
```vi
```
• The denominator of the third expression in the equation is:
```fv
```
It should be:
```fv
```
572 Eq. B.162 The second of the two equations begins with:
```(ri = r0)
```
It should begin with:
```(ri - r0)
```
573 Eq. B.169
• The last element of the left column vectors is:
```W11
```
It should be:
```W11
```
• In the rightmost expression, the column vector is multiplied by:
```1/||W'6||
```
It should be:
```1/||W11||
```
Also, the dot indicating multiplication is not needed.
511 Eq. B.57

Last updated, April 2010
R. Parent, CSE Dept., Ohio State University