That's why you always normalize the quaternion first, and the article seems to require the normalized form:
Q.54 How do I convert a quaternion to a rotation matrix?
Assuming that a quaternion has been created in the form:
Q = |X Y Z W|
At least, I would read |X Y Z W| as meaning normalized(X Y Z W)
I don't see this notation explicitly defined when they describe quaternion normalization (Q.52) though, so I agree this leaves much out. It's more a cheat sheet than learning material.
> You need to replace sqrt(1 - a*a) assumptions with actual components, and use atan2 instead of acos
I'm kind of rusty with this, but I think the reason we don't do that is that it's cheaper to normalize then convert rather than use the non-normalized conversion formula. Correct me if I'm wrong.
What exactly does `i` correspond to in a quaternion? They always rely on implicit assumptions/conventions.
These cheat sheets are convenient _if you already know what you are doing_ and _are confident the cheat sheet uses same presentation as your problem domain_.
That said I'm not sure if there is a nice book that would be both exact and practical at the same time.