# Visualizing Quaternions: New Information/Errata

• Foreword: Page xxiii: Line 16: The phrase "enables him take you..." should be "enables him to take you"...
• Chapter 02: Pages 24 and 25: Figures 2.8 and 2.9 should have been printed in color.
• Page 45: Two lines before Eq. (6.3), insert a comma after " A2 + B2 = 1 ".
• Page 51: The equation at the top of the page is the sum of squares of the top row of Eq. (6.8), and therefore the plus signs in front of (q2)2 and (q3)2 should of course be minus signs. (Thanks to John McCormack.)
• Page 54: Second line: replace " function only at "   by   " function only of ".
• Page 58: The polar form of a complex number is not "r cos(theta) + i sin(theta), "   but   " r cos(theta) + i r sin(theta)" (Thanks to Jeff Boyd.)
• Page 108: The rotation matrix shown is for a z-axis rotation. It should be an x-axis rotation matrix to match the rest of the discussion, that is move the 2 by 2 matrix of cosines and sines from the upper left portion of the 3 by 3 matrix to the lower right corner. (Thanks to James McGovern.)
• Page 115: The second "cos" in the formula for q(t) should be "sin". (Thanks to Markus Ulrich.)
• Page 292: In the equation in the last line, change the "t" after "x2" to a plus sign: "+". That is, " +2 t2(1-t)x2 t (1-2t+2t2)x3 " should be " +2t2(1-t)x2 + (1-2t+2t2)x3 ".
• Page 361: Sec. 28.2.6, Eq. (28.11), the ``+'' sign in front of the (xixj) term in the inverse N-sphere metric should be ``-''.
• Page 384: At the end of the middle line (after the big equation) starting " where the mapping function ", replace the last word: " proceeding " by the word " preceding ".
• Closed form of Quaternion for Double Reflection, add to Chapter 31, p. 393ff. A paper by Wang, Jüttler, Zheng, and Liu (Computation of Rotation Minimizing Frames, ACM TOG 27, 18 pp, 2008) points out that a double reflection about two vectors yields an excellent numerical method for computing rotation minimizing frames. This is of course just the Clifford Algebra form for a particular rotation, as described in Chapter 31 of Visualizing Quaternions. Inadvertantly omitted from Chapter 31 is the closed form formula for the resulting quaternion, which can be used to implement the method of Wang, et al. as follows:

The quaternion corresponding to the rotation resulting from (Clifford Algebra-induced) reflections about the two normalized vectors A and B is simply

`      q =  ( A · B, A × B )   `

where clearly, since A and B are both unit-length three-vectors, there is something wrong -- we have four free variables instead of three. But it's fine because this is really a circle bundle: there is a one-parameter rotation in the (A, B) plane that, for any rotation, generates the same quaternion, and thus the needed reduction to three free variables is achieved.
• Transposed elements in C Program, Table E.3, page 446. Thanks to Robert Hanson for noting that the right-hand sides of four lines of C code in Table E.3 are transposed.
• ` quat->x = (m - m) * s ; `
• ` quat->y = (m - m) * s ; `
• ` quat->z = (m - m) * s ; `
• 11 lines down : ` q = (m[k][j] - m[j][k]) * s ; `
• Further typos in Appendix E, pages 444, 446, 447. Thanks to Fabien Sanglard for noting these.
• On p. 444: In the QuaternionDot method,
``` double q0, double q1, double q2, double q3,```
should be
``` double q0, double q1, double q2, double q3)```
• On p. 446: In the MatToQuat method,
``` MatToQuat(double m, QUAT *quat)```
should be replaced by
``` MatToQuat(double m, Quat *quat)```
• On p. 447: In the QuatToMatrix method,
``` QuatToMatrix(QUAT * quat, double m)```
should be replaced by
``` QuatToMatrix(Quat * quat, double m)```
• These typos in Appendix E have been corrected in the file Quaternion Survival Kit.
• Page 458: In the fifth line of the top equation, replace "Bijn" by "Bijk".
• Page 470: In the second equation, replace " gij = 2 deltaij / (|x|2+1)"   by   " gij = 4 deltaij / (|x|2+1)2  ".

Last updated 20 April 2016
Andrew J. Hanson