0 | module Data.NumIdr.Transform.Rigid
3 | import Data.NumIdr.Interfaces
4 | import Data.NumIdr.Array
5 | import Data.NumIdr.Vector
6 | import Data.NumIdr.Matrix
7 | import Data.NumIdr.Homogeneous
8 | import Data.NumIdr.Transform.Point
9 | import Data.NumIdr.Transform.Transform
10 | import Data.NumIdr.Transform.Rotation
18 | Rigid : Nat -> Type -> Type
19 | Rigid = Transform TRigid
25 | isRigid : FieldCmp a => HMatrix' n a -> Bool
26 | isRigid mat = isHMatrix mat && isRotation' (getMatrix mat)
29 | fromHMatrix : FieldCmp a => HMatrix' n a -> Maybe (Rigid n a)
30 | fromHMatrix mat = if isRigid mat then Just (unsafeMkTrans mat) else Nothing
34 | rigid2D : Vector 2 Double -> Double -> Rigid 2 Double
35 | rigid2D v a = setTranslation v (rotate2D a)
45 | faceTowards : (orig, target : Point 3 Double) -> (up : Vector 3 Double)
47 | faceTowards orig target up = setTranslation (toVector orig)
48 | (faceTowards (orig -. target) up)