Physics for Game Developers By David M. Bourg The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated March 27, 2007. UNCONFIRMED errors and comments from readers: (1) 2nd paragraph; The name of Newton's work is "Philosophiae Naturalis Principia Mathematica" - not Mathematia {3} 1st equation; Equation reads ... Rf = 1/5 rho V**2 S Cf but should be ... Rf = 1/2 rho V**2 S Cf (6) second sentance of last paragraph reads; "First, divide the body into an infinite number of elemental masses..." should be: "First, divide the body into an finite number of elemental masses..." (8) second c code example; TotalMass += Element[I].mass; have to be modified by TotalMass += Element[i].mass; [12] Table 1-2; Car Width = 6ft and Car Centroid = (Xcgcar, Ycgcar) = (100, 100)ft Driver Centroid = (Xcgdriver, Ycgdriver) = (103, 105)ft Ycgcar must be more or less in the center of the car (along Y axis), so if we move driver 5ft up (Ycgcar =100ft --> Ycgdriver = 105ft), the driver will be outside the car. It is not logical to make Ycgdriver bigger than 101.5f, maybe 102ft. It will change the results of some following formulas and in the last paragraph on page [14] we will have about 6% instead of 2.7%. {13} Two errors on page 13. 1)The W(Total) figure is added up wrong. Should be 4313 pounds not the 4317 pounds amount shown. 2) The x(CG fuel) amount is wrong. It is listed as 93 ft in Table 1-2, but is transferred as 100 ft in the X(CG body) totals. {13} Equation for X(cg body); In the formula for X(cg body), I think the substituted value for X(cg fuel) is wrong (should be 93ft, not 100ft). Am i mistaken? {13} 2; Xcg body = .....(100ft)(210lb)}/4317lb -> ....(93ft)(210lb)}/4317lb [17] in 5-th paragraph; 1.Instead of "(w x ri) is the angular momentum of of the i-th particle" should be "ri x mi(w x ri) is the...) 2.Instead of "which has a magnitude of wri" should be "which has a magnitude of (mi wri^2)" (20) 4th equation; The matrix *I* has illegal matrix form. It have to be modified by I = | Ixx -Ixy -Ix | | -Iyx Iyy -Iyz | | -Izx -Izy Izz | (32) 3rd equation from top; a=dv/dt=d^2 s/dt = d^2 x/dt i + d^2 y/dt j ought to read a=dv/dt=d^2 s/dt^2 = d^2 x/dt^2 i + d^2 y/dt^2 j (34) 3rd paragraph from top; a=d^2 s/dt = d^2 x/dt i + d^2 y/dt j + d^2 z/dt k ought to read a=d^2 s/dt^2 = d^2 x/dt^2 i + d^2 y/dt^2 j + d^2 z/dt^2 k {54} second equation under the figure of vector cross product; In the equation C = AB sin theta C is not a vector, so it shouldn't be printed as bold letter [57] in half of 1-st paragraph of "Introduction" section; The sentence: "In general, force is that which makes an object move or, more precisely, changes the acceleration of the object." is a serious mistake. Force is that, what gives the acceleration, which means that changes the velocity. Force changes the velocity, not the acceleration. If the force is constant, the acceleration is constant as well. Acceleration can be changed due to the change of force not due to the force itself. {66} figure 3.3; vector F should be normal to the perpendicular distance d. {71} 2-nd equation from the bottom; The equation in form: T - R = ma should be modified by: T + R = ma At the top of this page we have: R = -Cv. Substitiuting that we get: T - R = T - (-Cv)= T + Cv which means that total resistance force R has the same direction as propeller thrust T. The resulting equation T + Cv = ma means perpetuum mobile - the dream of all magicians. {76} third set of equations; there are two equations that "define the wind direction as measured by the angle ", one for the x-component, and one for the z-component. In the middle of the second (z) equation there is a "cos " when it should be "sin ". The error appears to be due to copying the equation above it (x) and changing the sin in one place (at the right end of the equation), but missing the other change (in the middle). {76} defining C.d as independent of mass(or volume) results in a ridiculous equation. Should be able to define C.d=0 for F.d=0 This is explained later in book(p.111). {76} 2nd Paragraph 's Equation; It is printed Fwx = Fw*cos(r) = - (CwVw)cos(r) Fwz = Fw*cos(r) = - (CwVw)sin(r) But Second Equation should be Fwz = Fw*sin(r) = - (CwVw)sin(r) {79} 3rd line of text; In the equation for calculating displacement in the z direction, the term in the exponent should be (-Cd/m)*t instead of (-Cd*m)*t {84} first equation; The first equation is incorrect, it should read that the sum of the forces is Fp - Ff1-Ff2. [85] cylinder rolling down a plane example; This example, as presented is simply incorrect. The conceptual problem is that static friction need not be the coefficient of static friction times the Normal force, it can be any amount less than this. The solution, given on page 86, is simply wrong and can be immediatly spotted as unphysical in that the acceleration down the incline doesn't depend on moment of inertia, whereas in real life it does. I should point out, the funny result - that for any coefficient of static friction an angle less then arcsin(mu_s N/mg) the solution will have the cylinder roll uphill! The proper solution to this problem requires the angular and linear motion be solved simultaniously coupled by the constraint that the angular position times r is the linear position. [85-86] (friction force is equal to mu.s * N) F.f = I* a.x < mu.s * N (motion is coupled to rotary inertia) {89} line 2; 0.008 should be 0.0008 {91} Figure 5-2; This figure is drawn incorrectly. The line of action n is not perpendicular to line t. It should be, since this moves ball 2's center so its j-axis seperation from ball 1's center is r. That's what's required by the equation for the normal vector n on the next page: n = (sqrt((2r)^2 - r^2)i - rj)/|n| (91) Figure 5-2; If not noticed, this figure maybe confusing because of the orientation of its x-axis and i-normal. They're verticle instead of horizontal as is the convention used in most text and the rest of this book as well. {92} 9th line; Dividing by |n| does not make much sense since n is by definition a unit vector and so |n| equals 1. Instead divide by 2r here. {94} 5th line; Same problem as on page 92. Dividing by |n| does not make much sense since n is by definition a unit vector and so |n| equals 1. Instead divide by r_1 + r_2 here. {94} 6-th and 7-th equation; The v1n- and v2n- are vectors. They are incorrectly presented as scalars. {98} the tangential friction force is only equal to the normal force times the coefficient of static friction immediately before slippage occurs. {98} 3rd paragraph formulas for omega; I_cg should be I_1 and I_2 for omega_1+ and omega_2+ {98} top; 1st equation; Equation reads ... J= -V_r(e+1)... but should be ... J= -(V_r dot_prod N)(e+1)... (V_r and N are vectors) [99] 1-st equation; tan(PHI) = F_f/F_n = (mu) The same angle is represented in different way: - in this equation (PHI) - upper case - on the figure 5.6 (phi) - lower case (100) 1st equation; On p. 100 the equation for J from p. 98 is supposedly repeated. In addition to the mistake noted by someone else on p. 98 that vr should be (vr dot n), this copy of the equation is missing the "cross r1" and "cross r2" parts after I1 and I2 respectively. {104} Figure 6-2, Figure 6-3; Should not "b" and "h" be measured from the same baseline? As it is shown now, h is measured from the top of the shaded area, and b is measured from the bottom, leaving their relationship ambiguous. "b" should be measured from the same hight as the x/y coordinate axes. (123) Figure 7-3 'Cord' should be 'Chord' {129} stalling at an air show is not an example of stalling as a result of reduced density with altitude - confusing example? {134} Figure 7-6 shows C.l=0.75 at 8 degrees (not 0.92) 'Instructions.txt' is missing from the download files. (149) 'interesting spheres' should be 'intersecting spheres'? {153} 5th line; In the definition of the class Body3D, the line TFace Face[MAX_NUM_VERTICES]; should be changed to TFace Face[MAX_NUM_FACES]; (159) 1st equation; The subscript pressure is mis-spelt as preassure. [183] 2 figures; figures 11-5 and 11-6 are supposed to be copies of figures 11-2 and 11-3 (on pa ges 176 and 177) with extra information superimposed on them. however, aside f rom the graphs' legends, which show how to identify the extra information, they are exact copies of the previous 2 figures. specifically, the graphs are miss ing the "Improved" and "R-K" lines. see the second paragraph on page 182 ("To show you how...") for text explaing what the two figures should be showing. (186,187) last line, 8th line 'with be u- on the figure 5.6 (phi) - lower casesed' should be 'will be used' [190,192] In the code, the call to VRotate2D; On the page 190, the call to VRotate2D is made with (body->fOrientation, Fb) and on the page 192, the call is made with (-craft->fOrientation, craft->vVelocity) This seem to assume that VRotate2D will *add* the angle passed to the vector passed. The problem is that if you look at the source code of VRotate2D, it *substract* the angle passed to the vector passed. Hence, there should be a minus sing on page 190 and the minus sing should be removed on page 192... (198) Footnote; The Awesome Power of Direct3D/DirectX by Peter J Kovach - not Kovack. [207, 209, 210] various places; The use of CollisionBody1 and CollisionBody2 in code is not explained. In the code in the book these values are set to 0 then never updated. (In the example source available from the website these values are updated inside CheckForCollision.) {224} Chapter 14 Rigid Body Rotation, section Rotation Matrices (p 224) states that: "Multiple rotation matrices reflecting multiple sequential rotations can be combined into a single rotation matrix using usual matrix multiplication. If the rotation matrices are expressed in terms of fixed, global coordinates, then they are combined as follows: Rc = R2 R1 Here Rc is the combined rotation matrix reflecting a rotation first by R1 and then by R2. If the rotation matrices are expressed in terms of rotating, body-fixed coordinates, then they are combined in the reverse order as follows: Rc = R1 R2" One of the references given in the General Physics and Dynamics section of the Bibliography is the book Advanced Engineering Dynamics by Jerry Ginsberg. I have the second edition of this book, which in Chapter 3 Relative Motion, Section 3.2.1 Body-Fixed Rotations, states that the rotation matrix for n body-fixed rotations is given by [R] = [Rn] ... [R2] [R1] Section 3.2.2 Space-Fixed Rotations states that for n space-fixed rotations the rotation matrix is given by [R] = [R1] [R2] ... [Rn] Note that Bourg has it reversed. [266] Code downloaded from site; I am not an expert, but I can't see any logic in the CheckEdgeEdgeCollisions code. Take the example of 2 edges with both ends on x=0. tx would be set to -1 (denom=0), and there would never be a collision, but they could intercept. [288] Vector::Normalize(); The line that says if( m <= tol ) m = 1; means that a very short vector will never be lengthened to be 1 unit long. I think this is trying to avoid division by zero, so maybe it should be if( m <= tol ) m = tol; [293] Picture and paragraph about Vector Dot Product; P is described as the vector dot product U * V. In the picture and the sentence above and below, P is described as the projection of U onto V. This is incorrect. The projection should be labelled something like Pu with Pu = P / |V| and Pv = P / |U|.