ベクトルAとベクトルBの角度を求める方法を考えてみます.
A(ax, ay, az)とB(bx, by, bz)の内積をA・Bとすると,
A・B = ax*bx + ay*by + az*bz
です.また,A,Bの角度をθとすると,A,Bはcosを使って
A・B = |A|*|B|cosθ
も成り立ちます.よって
|A|*|B|cosθ = ax*bx + ay*by + az*bz
が成り立ち,整理すると
cosθ=(ax*bx + ay*by + az*bz) / (|A|*|B|)
= (ax*bx + ay*by + az*bz) / ( sqr(ax^2 + ay^2 + az^2)*sqr(bx^2 + by^2 + bz^2) )
となります.後はacosを使い,
θ=acos( (ax*bx + ay*by + az*bz) /
(sqr(ax^2 + ay^2 + az^2)*sqr(bx^2 + by^2 + bz^2)) )
となります.