hgeometry-0.10.0.0: Geometric Algorithms, Data structures, and Data types.

Safe HaskellNone
LanguageHaskell2010

Data.Geometry.Transformation

Contents

Synopsis

Matrices

newtype Matrix n m r Source #

a matrix of n rows, each of m columns, storing values of type r

Constructors

Matrix (Vector n (Vector m r)) 
Instances
(Arity n, Arity m) => Functor (Matrix n m) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

fmap :: (a -> b) -> Matrix n m a -> Matrix n m b #

(<$) :: a -> Matrix n m b -> Matrix n m a #

(Eq r, Arity n, Arity m) => Eq (Matrix n m r) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

(==) :: Matrix n m r -> Matrix n m r -> Bool #

(/=) :: Matrix n m r -> Matrix n m r -> Bool #

(Ord r, Arity n, Arity m) => Ord (Matrix n m r) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

compare :: Matrix n m r -> Matrix n m r -> Ordering #

(<) :: Matrix n m r -> Matrix n m r -> Bool #

(<=) :: Matrix n m r -> Matrix n m r -> Bool #

(>) :: Matrix n m r -> Matrix n m r -> Bool #

(>=) :: Matrix n m r -> Matrix n m r -> Bool #

max :: Matrix n m r -> Matrix n m r -> Matrix n m r #

min :: Matrix n m r -> Matrix n m r -> Matrix n m r #

(Show r, Arity n, Arity m) => Show (Matrix n m r) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

showsPrec :: Int -> Matrix n m r -> ShowS #

show :: Matrix n m r -> String #

showList :: [Matrix n m r] -> ShowS #

multM :: (Arity r, Arity c, Arity c', Num a) => Matrix r c a -> Matrix c c' a -> Matrix r c' a Source #

mult :: (Arity m, Arity n, Num r) => Matrix n m r -> Vector m r -> Vector n r Source #

class Invertible n r where Source #

Methods

inverse' :: Matrix n n r -> Matrix n n r Source #

Instances
Fractional r => Invertible 2 r Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

inverse' :: Matrix 2 2 r -> Matrix 2 2 r Source #

Fractional r => Invertible 3 r Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

inverse' :: Matrix 3 3 r -> Matrix 3 3 r Source #

Fractional r => Invertible 4 r Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

inverse' :: Matrix 4 4 r -> Matrix 4 4 r Source #

Transformations

newtype Transformation d r Source #

A type representing a Transformation for d dimensional objects

Constructors

Transformation 

Fields

Instances
Arity (d + 1) => Functor (Transformation d) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

fmap :: (a -> b) -> Transformation d a -> Transformation d b #

(<$) :: a -> Transformation d b -> Transformation d a #

(Eq r, Arity (d + 1)) => Eq (Transformation d r) Source # 
Instance details

Defined in Data.Geometry.Transformation

(Ord r, Arity (d + 1)) => Ord (Transformation d r) Source # 
Instance details

Defined in Data.Geometry.Transformation

(Show r, Arity (d + 1)) => Show (Transformation d r) Source # 
Instance details

Defined in Data.Geometry.Transformation

type NumType (Transformation d r) Source # 
Instance details

Defined in Data.Geometry.Transformation

type NumType (Transformation d r) = r

(|.|) :: (Num r, Arity (d + 1)) => Transformation d r -> Transformation d r -> Transformation d r Source #

Compose transformations (right to left)

inverseOf :: (Fractional r, Invertible (d + 1) r) => Transformation d r -> Transformation d r Source #

Compute the inverse transformation

>>> inverseOf $ translation (Vector2 (10.0) (5.0))
Transformation {_transformationMatrix = Matrix Vector3 [Vector3 [1.0,0.0,-10.0],Vector3 [0.0,1.0,-5.0],Vector3 [0.0,0.0,1.0]]}

Transformable geometry objects

class IsTransformable g where Source #

A class representing types that can be transformed using a transformation

Methods

transformBy :: Transformation (Dimension g) (NumType g) -> g -> g Source #

Instances
IsTransformable g => IsTransformable (Boundary g) Source # 
Instance details

Defined in Data.Geometry.Boundary

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (Vector d r) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

transformBy :: Transformation (Dimension (Vector d r)) (NumType (Vector d r)) -> Vector d r -> Vector d r Source #

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (Point d r) Source # 
Instance details

Defined in Data.Geometry.Transformation

Methods

transformBy :: Transformation (Dimension (Point d r)) (NumType (Point d r)) -> Point d r -> Point d r Source #

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (Line d r) Source #

Lines are transformable, via line segments

Instance details

Defined in Data.Geometry.Line

Methods

transformBy :: Transformation (Dimension (Line d r)) (NumType (Line d r)) -> Line d r -> Line d r Source #

(Arity d, Arity (d + 1), Fractional r) => IsTransformable (HyperPlane d r) Source # 
Instance details

Defined in Data.Geometry.HyperPlane

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (HalfLine d r) Source # 
Instance details

Defined in Data.Geometry.HalfLine

(Arity d, Arity (d + 1), Fractional r) => IsTransformable (HalfSpace d r) Source # 
Instance details

Defined in Data.Geometry.HalfSpace

Fractional r => IsTransformable (ConvexPolygon p r) Source # 
Instance details

Defined in Data.Geometry.Polygon.Convex

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (Box d p r) Source # 
Instance details

Defined in Data.Geometry.Box.Internal

Methods

transformBy :: Transformation (Dimension (Box d p r)) (NumType (Box d p r)) -> Box d p r -> Box d p r Source #

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (LineSegment d p r) Source # 
Instance details

Defined in Data.Geometry.LineSegment

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (PolyLine d p r) Source # 
Instance details

Defined in Data.Geometry.PolyLine

Methods

transformBy :: Transformation (Dimension (PolyLine d p r)) (NumType (PolyLine d p r)) -> PolyLine d p r -> PolyLine d p r Source #

(Fractional r, Arity d, Arity (d + 1)) => IsTransformable (Triangle d p r) Source # 
Instance details

Defined in Data.Geometry.Triangle

Methods

transformBy :: Transformation (Dimension (Triangle d p r)) (NumType (Triangle d p r)) -> Triangle d p r -> Triangle d p r Source #

Fractional r => IsTransformable (Polygon t p r) Source # 
Instance details

Defined in Data.Geometry.Polygon.Core

Methods

transformBy :: Transformation (Dimension (Polygon t p r)) (NumType (Polygon t p r)) -> Polygon t p r -> Polygon t p r Source #

transformPointFunctor :: (PointFunctor g, Fractional r, d ~ Dimension (g r), Arity d, Arity (d + 1)) => Transformation d r -> g r -> g r Source #

Common transformations

translation :: (Num r, Arity d, Arity (d + 1)) => Vector d r -> Transformation d r Source #

scaling :: (Num r, Arity d, Arity (d + 1)) => Vector d r -> Transformation d r Source #

uniformScaling :: (Num r, Arity d, Arity (d + 1)) => r -> Transformation d r Source #

Functions that execute transformations

Helper functions to easily create matrices

mkRow :: forall d r. (Arity d, Num r) => Int -> r -> Vector d r Source #

Creates a row with zeroes everywhere, except at position i, where the value is the supplied value.

transRow :: forall n r. (Arity n, Arity (n + 1), Num r) => Int -> r -> Vector (n + 1) r Source #

Row in a translation matrix transRow :: forall n r. ( Arity n, Arity (n- 1), ((n - 1) + 1) ~ n , Num r) => Int -> r -> Vector n r transRow i x = set (V.element (Proxy :: Proxy (n-1))) x $ mkRow i 1

3D Rotations

rotateTo :: Num r => Vector 3 (Vector 3 r) -> Transformation 3 r Source #

Given three new unit-length basis vectors (u,v,w) that map to (x,y,z), construct the appropriate rotation that does this.