0 | module Data.NumIdr.Transform.Linear
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
16 | Linear : Nat -> Type -> Type
17 | Linear = Transform TLinear
22 | isLinear : FieldCmp a => HMatrix' n a -> Bool
23 | isLinear mat = isHMatrix mat && invertible (getMatrix mat)
24 | && all (==0) (getTranslationVector mat)
28 | fromHMatrix : FieldCmp a => HMatrix' n a -> Maybe (Linear n a)
29 | fromHMatrix mat = if isLinear mat then Just (unsafeMkTrans mat) else Nothing
34 | fromMatrix : FieldCmp a => Matrix' n a -> Maybe (Linear n a)
35 | fromMatrix mat = if invertible mat then Just (unsafeMkTrans (matrixToH mat))