geomancy-0.4.0.0: test/Support/Linear.hs
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE ImportQualifiedPost #-}
module Support.Linear
( toM44
, toM44D
, toV3
, toV3D
, toV4
, toV4D
, toQ
, toQD
, entries
) where
import Geomancy
import Data.Foldable (toList)
import Linear qualified
import Geomancy.DMat4 qualified
import Geomancy.Mat4 (withRowMajor)
toM44 :: Geomancy.Mat4 -> Linear.M44 Float
toM44 mat4 =
withRowMajor mat4
\ m00 m10 m20 m30
m01 m11 m21 m31
m02 m12 m22 m32
m03 m13 m23 m33 ->
Linear.V4
(Linear.V4 m00 m10 m20 m30)
(Linear.V4 m01 m11 m21 m31)
(Linear.V4 m02 m12 m22 m32)
(Linear.V4 m03 m13 m23 m33)
toM44D :: Geomancy.DMat4.DMat4 -> Linear.M44 Double
toM44D dmat4 =
Geomancy.DMat4.withRowMajor dmat4
\ m00 m10 m20 m30
m01 m11 m21 m31
m02 m12 m22 m32
m03 m13 m23 m33 ->
Linear.V4
(Linear.V4 m00 m10 m20 m30)
(Linear.V4 m01 m11 m21 m31)
(Linear.V4 m02 m12 m22 m32)
(Linear.V4 m03 m13 m23 m33)
toV3 :: Vec3 -> Linear.V3 Float
toV3 v = withVec3 v Linear.V3
toV3D :: DVec3 -> Linear.V3 Double
toV3D v = withDVec3 v Linear.V3
toV4 :: Vec4 -> Linear.V4 Float
toV4 v = withVec4 v Linear.V4
toV4D :: DVec4 -> Linear.V4 Double
toV4D v = withDVec4 v Linear.V4
toQ :: Geomancy.Quaternion -> Linear.Quaternion Float
toQ q = withQuaternion q \s x y z -> Linear.Quaternion s (Linear.V3 x y z)
toQD :: DQuaternion -> Linear.Quaternion Double
toQD q = withDQuaternion q \s x y z -> Linear.Quaternion s (Linear.V3 x y z)
entries :: (Foldable f, Foldable g) => f (g a) -> [a]
entries = concatMap toList