1 module Rotate (rotate) where 2 import Numbers 3 import Vectors 4 import Matrices 5 6 rotate :: Vector -> Vector -> Vector 7 rotate v w | v==0 = w 8 | normv==vec [0,0,1] = w 9 | normv==vec [0,0,-1] = -w 10 | otherwise = mat [p,q,r] `mulm` w 11 where normv = norm(v) 12 p = norm(q*r) 13 q = norm(vec [0,0,1]*r) 14 r = normv