{- |
  4-dimensional linear transformations.
-}

module Data.Vector.Transform.T4 where

import Data.Semigroup
import Data.Monoid

import Data.Vector.Class
import Data.Vector.V4

{- |
  The type of 4D linear transformations.

  Note the @Monoid@ instance, which gives you access to the identity transform (@mempty@) and the ability to combine a series of transforms into a single transform (@mappend@).
-}
data Transform4 =
    Transform4
    {
      Transform4 -> Scalar
t4_XX, Transform4 -> Scalar
t4_YX, Transform4 -> Scalar
t4_ZX, Transform4 -> Scalar
t4_WX, Transform4 -> Scalar
t4_1X,
      Transform4 -> Scalar
t4_XY, Transform4 -> Scalar
t4_YY, Transform4 -> Scalar
t4_ZY, Transform4 -> Scalar
t4_WY, Transform4 -> Scalar
t4_1Y,
      Transform4 -> Scalar
t4_XZ, Transform4 -> Scalar
t4_YZ, Transform4 -> Scalar
t4_ZZ, Transform4 -> Scalar
t4_WZ, Transform4 -> Scalar
t4_1Z,
      Transform4 -> Scalar
t4_XW, Transform4 -> Scalar
t4_YW, Transform4 -> Scalar
t4_ZW, Transform4 -> Scalar
t4_WW, Transform4 -> Scalar
t4_1W :: {-# UNPACK #-} !Scalar
    }
  deriving (Transform4 -> Transform4 -> Bool
(Transform4 -> Transform4 -> Bool)
-> (Transform4 -> Transform4 -> Bool) -> Eq Transform4
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Transform4 -> Transform4 -> Bool
== :: Transform4 -> Transform4 -> Bool
$c/= :: Transform4 -> Transform4 -> Bool
/= :: Transform4 -> Transform4 -> Bool
Eq, Int -> Transform4 -> ShowS
[Transform4] -> ShowS
Transform4 -> String
(Int -> Transform4 -> ShowS)
-> (Transform4 -> String)
-> ([Transform4] -> ShowS)
-> Show Transform4
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Transform4 -> ShowS
showsPrec :: Int -> Transform4 -> ShowS
$cshow :: Transform4 -> String
show :: Transform4 -> String
$cshowList :: [Transform4] -> ShowS
showList :: [Transform4] -> ShowS
Show)

instance Monoid Transform4 where
  mempty :: Transform4
mempty = Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Scalar
-> Transform4
Transform4  Scalar
1 Scalar
0 Scalar
0 Scalar
0 Scalar
0  Scalar
0 Scalar
1 Scalar
0 Scalar
0 Scalar
0  Scalar
0 Scalar
0 Scalar
1 Scalar
0 Scalar
0  Scalar
0 Scalar
0 Scalar
0 Scalar
1 Scalar
0

instance Semigroup Transform4 where
  Transform4
a <> :: Transform4 -> Transform4 -> Transform4
<> Transform4
b =
    Transform4
    {
      t4_XX :: Scalar
t4_XX = Transform4 -> Scalar
t4_XX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WX Transform4
b,
      t4_YX :: Scalar
t4_YX = Transform4 -> Scalar
t4_YX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WX Transform4
b,
      t4_ZX :: Scalar
t4_ZX = Transform4 -> Scalar
t4_ZX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WX Transform4
b,
      t4_WX :: Scalar
t4_WX = Transform4 -> Scalar
t4_WX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WX Transform4
b,
      t4_1X :: Scalar
t4_1X = Transform4 -> Scalar
t4_1X Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Y Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Z Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1W Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WX Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1X Transform4
b,

      t4_XY :: Scalar
t4_XY = Transform4 -> Scalar
t4_XX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WY Transform4
b,
      t4_YY :: Scalar
t4_YY = Transform4 -> Scalar
t4_YX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WY Transform4
b,
      t4_ZY :: Scalar
t4_ZY = Transform4 -> Scalar
t4_ZX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WY Transform4
b,
      t4_WY :: Scalar
t4_WY = Transform4 -> Scalar
t4_WX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WY Transform4
b,
      t4_1Y :: Scalar
t4_1Y = Transform4 -> Scalar
t4_1X Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Y Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Z Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1W Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WY Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Y Transform4
b,

      t4_XZ :: Scalar
t4_XZ = Transform4 -> Scalar
t4_XX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WZ Transform4
b,
      t4_YZ :: Scalar
t4_YZ = Transform4 -> Scalar
t4_YX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WZ Transform4
b,
      t4_ZZ :: Scalar
t4_ZZ = Transform4 -> Scalar
t4_ZX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WZ Transform4
b,
      t4_WZ :: Scalar
t4_WZ = Transform4 -> Scalar
t4_WX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WZ Transform4
b,
      t4_1Z :: Scalar
t4_1Z = Transform4 -> Scalar
t4_1X Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Y Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Z Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1W Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WZ Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Z Transform4
b,

      t4_XW :: Scalar
t4_XW = Transform4 -> Scalar
t4_XX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_XW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WW Transform4
b,
      t4_YW :: Scalar
t4_YW = Transform4 -> Scalar
t4_YX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_YW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WW Transform4
b,
      t4_ZW :: Scalar
t4_ZW = Transform4 -> Scalar
t4_ZX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_ZW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WW Transform4
b,
      t4_WW :: Scalar
t4_WW = Transform4 -> Scalar
t4_WX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_WW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WW Transform4
b,
      t4_1W :: Scalar
t4_1W = Transform4 -> Scalar
t4_1X Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_XW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Y Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_YW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1Z Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_ZW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1W Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Transform4 -> Scalar
t4_WW Transform4
b  Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+  Transform4 -> Scalar
t4_1W Transform4
b
    }

-- | Apply a 4D transformation to a 4D point, yielding a new 4D point.
transformP4 :: Transform4 -> Vector4 -> Vector4
transformP4 :: Transform4 -> Vector4 -> Vector4
transformP4 Transform4
a (Vector4 Scalar
x Scalar
y Scalar
z Scalar
w) =
  Vector4
  {
    v4x :: Scalar
v4x = Transform4 -> Scalar
t4_XX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
x Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_YX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
y Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_ZX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
z Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_WX Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
w Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_1X Transform4
a,
    v4y :: Scalar
v4y = Transform4 -> Scalar
t4_XY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
x Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_YY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
y Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_ZY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
z Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_WY Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
w Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_1Y Transform4
a,
    v4z :: Scalar
v4z = Transform4 -> Scalar
t4_XZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
x Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_YZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
y Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_ZZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
z Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_WZ Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
w Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_1Z Transform4
a,
    v4w :: Scalar
v4w = Transform4 -> Scalar
t4_XW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
x Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_YW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
y Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_ZW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
z Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_WW Transform4
a Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
* Scalar
w Scalar -> Scalar -> Scalar
forall a. Num a => a -> a -> a
+ Transform4 -> Scalar
t4_1W Transform4
a
  }