Copyright | John Lato |
---|---|
License | BSD3 (see LICENSE) |
Maintainer | John Lato <jwlato@gmail.com> |
Stability | unstable |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
Data.RangeSpace
Description
- data Range t = Range !t !t
- type Bounds t = (t, t)
- type Span t = (t, Diff t)
- toBounds :: Ord t => Range t -> Bounds t
- fromBounds :: Ord t => Bounds t -> Range t
- fromBoundsC :: Ord t => t -> t -> Range t
- newRange :: BasisRange t => t -> t -> Range t
- rangeStart :: Ord t => Range t -> t
- rangeEnd :: Ord t => Range t -> t
- range :: AffineSpace t => Range t -> Diff t
- toSpan :: AffineSpace t => Range t -> (t, Diff t)
- fromSpan :: AffineSpace t => Span t -> Range t
- fromSpanC :: AffineSpace t => t -> Diff t -> Range t
- range2D :: (Ord a, Ord b) => Range a -> Range b -> Range (D2V a b)
- fromRange2D :: (Ord a, Ord b) => Range (D2V a b) -> (Range a, Range b)
- unionBounds :: BasisRange t => Bounds t -> Bounds t -> Bounds t
- translateRange :: AffineSpace t => Diff t -> Range t -> Range t
- unionRange :: BasisRange t => Range t -> Range t -> Range t
- maskRange :: (Eq (Basis (Diff t)), BasisRange t) => Range t -> Range t -> Range t
- inRange :: (BasisRange a, Eq (Basis (Diff a))) => a -> Range a -> Bool
- inOrdRange :: Ord a => a -> Range a -> Bool
- compareRange :: Ord a => a -> Range a -> Ordering
- extentX :: (Ord b, Ord a) => Range (Point (D2V a b)) -> Range a
- extentY :: (Ord b, Ord a) => Range (Point (D2V a b)) -> Range b
Types
Define a Range over some domain
Constructors
Range !t !t |
Conversions
fromBounds :: Ord t => Bounds t -> Range t Source
Create a Range
from a '(min,max)' Bounds
pair.
fromBounds
uses the Ord
instance to construct a Range
. For
multi-dimensional types, this probably isn't correct. For that case, see
newRange
fromBoundsC :: Ord t => t -> t -> Range t Source
A curried form of fromBounds
See the notes for fromBounds
.
newRange :: BasisRange t => t -> t -> Range t Source
Create a range from a 'start,stop' pair. For multi-dimensional ranges, the resulting range will be the union of the two points.
rangeStart :: Ord t => Range t -> t Source
range :: AffineSpace t => Range t -> Diff t Source
Get the range covered by a Range
toSpan :: AffineSpace t => Range t -> (t, Diff t) Source
Generate a Span
, '(start, distance)' from a Range
fromSpan :: AffineSpace t => Span t -> Range t Source
Generate a Range
from a Span
'(start, distance)'
fromSpanC :: AffineSpace t => t -> Diff t -> Range t Source
A curried fromSpan
range2D :: (Ord a, Ord b) => Range a -> Range b -> Range (D2V a b) Source
Create a 2D range from two independent axes.
fromRange2D :: (Ord a, Ord b) => Range (D2V a b) -> (Range a, Range b) Source
Decompose a 2D range into X/Y axes.
Functions
Combining ranges
unionBounds :: BasisRange t => Bounds t -> Bounds t -> Bounds t Source
Calculate the union of two Bounds
. See the notes for unionRange
.
translateRange :: AffineSpace t => Diff t -> Range t -> Range t Source
Translate a Range
by the given amount.
unionRange :: BasisRange t => Range t -> Range t -> Range t Source
Calculate the union of two Range
s, per-basis.
The union is constructed by calculating the difference vector between two points, performing a basis decomposition on that vector, performing comparisons and adjustments on each basis vector, recomposing, and adding the result back to the starting position.
The advantage of this method is that it works on an AffineSpace
and
doesn't require a full VectorSpace
. It does require that the
affine space scalars are in a vector space, but this is more easily
satisfiable.
Querying ranges
inRange :: (BasisRange a, Eq (Basis (Diff a))) => a -> Range a -> Bool Source
True if a value lies inside a Range
.
inOrdRange :: Ord a => a -> Range a -> Bool Source
compareRange :: Ord a => a -> Range a -> Ordering Source
Compare a value to a Range
. Returns EQ
if the value is
inside the range, LT
or GT
if it's outside.
Uses Ord
for comparison.
extentX :: (Ord b, Ord a) => Range (Point (D2V a b)) -> Range a Source
Calculate the X extent of a 2D pointwise range
extentY :: (Ord b, Ord a) => Range (Point (D2V a b)) -> Range b Source
Calculate the Y extent of a 2D pointwise range