Presenting the formula + showing a computation example

Example of how to compute the angle between two 3D vectors

Short proof of the formula

Getting a signed angle between two 3D vectors

“Use cross product of the two vectors to get the normal of the plane formed by the two vectors.
Then check the dotproduct between that and the original plane normal to see if they are facing
the same direction.”

The relevant mathematical formulas:
dot_product(a,b) == length(a) * length(b) * cos(angle)
length(cross_product(a,b)) == length(a) * length(b) * sin(angle)
For a robust angle between 3-D vectors, your actual computation should be:
s = length(cross_product(a,b))
c = dot_product(a,b)
angle = atan2(s, c)
If you use acos(c) alone, you will get severe precision problems for cases
when the angle is small. Computing s and using atan2() gives you a robust
result for all possible cases.
Since s is always nonnegative, the resulting angle will range from 0 to pi.
There will always be an equivalent negative angle (angle - 2*pi), but there is
no geometric reason to prefer it.