Safe Haskell | None |
---|---|

Language | Haskell2010 |

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.

- newtype V1 a = V1 a
- data V2 a = V2 !a !a
- data V3 a = V3 !a !a !a
- data V4 a = V4 !a !a !a !a
- class R1 t where
- class R2 t where
- class Functor f => Additive f where
- class Num a => Epsilon a where
- class Additive f => Metric f where
- (^*) :: (Functor f, Num a) => f a -> a -> f a
- (^/) :: (Functor f, Floating a) => f a -> a -> f a
- normalize :: (Floating a, Metric f, Epsilon a) => f a -> f a

# Documentation

A 1-dimensional vector

V1 a |

A 2-dimensional vector

`>>>`

V2 1 1`pure 1 :: V2 Int`

`>>>`

V2 4 6`V2 1 2 + V2 3 4`

`>>>`

V2 3 8`V2 1 2 * V2 3 4`

`>>>`

3`sum (V2 1 2)`

V2 !a !a |

Functor V2 # | |

Applicative V2 # | |

Foldable V2 # | |

Traversable V2 # | |

Metric V2 # | |

Additive V2 # | |

R2 V2 # | |

R1 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) # | |

A 3-dimensional vector

V3 !a !a !a |

A 4-dimensional vector

V4 !a !a !a !a |

class Functor f => Additive f where #

A vector is an additive group with additional structure.

The zero vector

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

Compute the sum of two vectors

`>>>`

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

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

Compute the difference between two vectors

`>>>`

V2 1 4`V2 4 5 - V2 3 1`

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

Linearly interpolate between two vectors.

class Num a => Epsilon a where #

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

`>>>`

False`nearZero (1e-11 :: Double)`

`>>>`

True`nearZero (1e-17 :: Double)`

`>>>`

False`nearZero (1e-5 :: Float)`

`>>>`

True`nearZero (1e-7 :: Float)`

class Additive f => Metric f where #

Free and sparse inner product/metric spaces.

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`

.

`>>>`

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

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.

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

Compute the right scalar product

`>>>`

V2 6 8`V2 3 4 ^* 2`