module ZEBEDDE.Quaternion where

import ZEBEDDE.Core.Vector

import Data.Vect.Float.Base
import Data.Vect.Float.Util.Quaternion


vec'  :: Vec  -> Vec3 
vec' v = (\ (a,b,c)-> Vec3 (realToFrac a)(realToFrac b)(realToFrac c) ) $ unVec v
vec'' :: Vec3 -> Vec
vec'' (Vec3 a b c) = vec ((realToFrac a),(realToFrac b),(realToFrac c))

rotate :: (Vec,Double) -> Vec -> Vec
rotate (axis,angle) v = vec'' (actU (rotU'' axis angle) (vec' v))

rotU'' :: Vec -> Double -> U
rotU'' v d = rotU (vec' v) (realToFrac d)


testRotation n = rotate (vec (1,0,0),n) (vec (0,0,1))