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