Rasterific-0.5.2.1: A pure haskell drawing engine.

Safe HaskellSafe-Inferred
LanguageHaskell2010

Graphics.Rasterific.Linear

Description

This module is a reduction of the Linear package from Edward Kmett to match just the need of Rasterific.

If the flag embed_linear is disabled, this module is just a reexport from the real linear package.

Synopsis

Documentation

data V2 a

A 2-dimensional vector

>>> pure 1 :: V2 Int
V2 1 1
>>> V2 1 2 + V2 3 4
V2 4 6
>>> V2 1 2 * V2 3 4
V2 3 8
>>> sum (V2 1 2)
3

Constructors

V2 !a !a 

Instances

Functor V2 
Applicative V2 
Metric V2 
Additive V2 
PointFoldable Point

Just apply the function

Transformable Point

Just apply the function

PlaneBoundable Point 
Eq a => Eq (V2 a) 
Num a => Num (V2 a) 
Show a => Show (V2 a) 
Epsilon a => Epsilon (V2 a) 

newtype V1 a

A 1-dimensional vector

Constructors

V1 a 

Instances

Functor V1 
Applicative V1 
Additive V1 
Eq a => Eq (V1 a) 
Show a => Show (V1 a) 

class Functor f => Additive f where

A vector is an additive group with additional structure.

Methods

zero :: Num a => f a

The zero vector

(^+^) :: Num a => f a -> f a -> f a infixl 6

Compute the sum of two vectors

>>> V2 1 2 ^+^ V2 3 4
V2 4 6

(^-^) :: Num a => f a -> f a -> f a infixl 6

Compute the difference between two vectors

>>> V2 4 5 - V2 3 1
V2 1 4

lerp :: Num a => a -> f a -> f a -> f a

Linearly interpolate between two vectors.

Instances

class Num a => Epsilon a where

Provides a fairly subjective test to see if a quantity is near zero.

>>> nearZero (1e-11 :: Double)
False
>>> nearZero (1e-17 :: Double)
True
>>> nearZero (1e-5 :: Float)
False
>>> nearZero (1e-7 :: Float)
True

Methods

nearZero :: a -> Bool

Determine if a quantity is near zero.

Instances

class Additive f => Metric f where

Free and sparse inner product/metric spaces.

Minimal complete definition

dot

Methods

dot :: Num a => f a -> f a -> a

Compute the inner product of two vectors or (equivalently) convert a vector f a into a covector f a -> a.

>>> V2 1 2 `dot` V2 3 4
11

quadrance :: Num a => f a -> a

Compute the squared norm. The name quadrance arises from Norman J. Wildberger's rational trigonometry.

qd :: Num a => f a -> f a -> a

Compute the quadrance of the difference

distance :: Floating a => f a -> f a -> a

Compute the distance between two vectors in a metric space

norm :: Floating a => f a -> a

Compute the norm of a vector in a metric space

signorm :: Floating a => f a -> f a

Convert a non-zero vector to unit vector.

Instances

(^*) :: (Functor f, Num a) => f a -> a -> f a infixl 7

Compute the right scalar product

>>> V2 3 4 ^* 2
V2 6 8

(^/) :: (Functor f, Floating a) => f a -> a -> f a infixl 7

Compute division by a scalar on the right.

normalize :: (Floating a, Metric f, Epsilon a) => f a -> f a

Normalize a Metric functor to have unit norm. This function does not change the functor if its norm is 0 or 1.