Copyright | (c) 2018 Mike Zuser |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | Mike Zuser <mikezuser@gmail.com> |
Safe Haskell | None |
Language | Haskell2010 |
Extra functions for working with the intersections of Path
s. This
module was motivated by explodeIntersections
. The rest of the module is
either functions that where needed to build it or functions to help
consume it.
Synopsis
- intersectParams :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => t -> s -> ([[n]], [[n]])
- intersectParams' :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => n -> t -> s -> ([[n]], [[n]])
- intersectParamsP :: OrderedField n => Path V2 n -> Path V2 n -> ([[n]], [[n]])
- intersectParamsP' :: OrderedField n => n -> Path V2 n -> Path V2 n -> ([[n]], [[n]])
- intersectParamsT :: OrderedField n => Located (Trail V2 n) -> Located (Trail V2 n) -> ([n], [n])
- intersectParamsT' :: OrderedField n => n -> Located (Trail V2 n) -> Located (Trail V2 n) -> ([n], [n])
- intersectParamsTS :: OrderedField n => Located (Trail V2 n) -> Located (Trail V2 n) -> ([[n]], [[n]])
- intersectParamsTS' :: OrderedField n => n -> Located (Trail V2 n) -> Located (Trail V2 n) -> ([[n]], [[n]])
- cutBy :: (OrderedField n, Real n, InSpace V2 n t, SameSpace t s, ToPath t, ToPath s) => t -> s -> [[Located (Trail V2 n)]]
- cutBy' :: (OrderedField n, Real n, InSpace V2 n t, SameSpace t s, ToPath t, ToPath s) => n -> t -> s -> [[Located (Trail V2 n)]]
- cutPBy :: (OrderedField n, Real n) => Path V2 n -> Path V2 n -> [[Located (Trail V2 n)]]
- cutPBy' :: (OrderedField n, Real n) => n -> Path V2 n -> Path V2 n -> [[Located (Trail V2 n)]]
- cutTBy :: (OrderedField n, Real n) => Located (Trail V2 n) -> Path V2 n -> [Located (Trail V2 n)]
- cutTBy' :: (OrderedField n, Real n) => n -> Located (Trail V2 n) -> Path V2 n -> [Located (Trail V2 n)]
- explodeSegments :: (Metric v, OrderedField n) => Path v n -> [[Located (Trail v n)]]
- explodeIntersections :: (OrderedField n, Real n) => Path V2 n -> [[Located (Trail V2 n)]]
- explodeIntersections' :: (OrderedField n, Real n) => n -> Path V2 n -> [[Located (Trail V2 n)]]
- explodeBoth :: (OrderedField n, Real n) => Path V2 n -> [[[Located (Trail V2 n)]]]
- explodeBoth' :: (OrderedField n, Real n) => n -> Path V2 n -> [[[Located (Trail V2 n)]]]
- class OnSections ps fs b n | ps b -> fs n, fs -> b n where
- onSections :: ps -> fs -> QDiagram b V2 n Any
Intersection Parameters
intersectParams :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => t -> s -> ([[n]], [[n]]) Source #
Find the intersect parameters for each component trail of two pathlike objects when the objects are intersected, returning a seperate list for each trail.
intersectParams' :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => n -> t -> s -> ([[n]], [[n]]) Source #
intersectParams
using the given tolerance.
intersectParamsP :: OrderedField n => Path V2 n -> Path V2 n -> ([[n]], [[n]]) Source #
Find the intersect parameters for each component trail of two paths when the paths are intersected, returning a seperate list for each trail.
intersectParamsP' :: OrderedField n => n -> Path V2 n -> Path V2 n -> ([[n]], [[n]]) Source #
intersectParamsP
using the given tolerance.
intersectParamsT :: OrderedField n => Located (Trail V2 n) -> Located (Trail V2 n) -> ([n], [n]) Source #
Find the intersect parameters between two located trails.
intersectParamsT' :: OrderedField n => n -> Located (Trail V2 n) -> Located (Trail V2 n) -> ([n], [n]) Source #
intersectParamsT
using the given tolerance.
intersectParamsTS :: OrderedField n => Located (Trail V2 n) -> Located (Trail V2 n) -> ([[n]], [[n]]) Source #
Find the intersect parameters for each component segment of two located trails when the trails are intersected, returning a list for each trail containing a list of intersections for each segemnt of that trail.
intersectParamsTS' :: OrderedField n => n -> Located (Trail V2 n) -> Located (Trail V2 n) -> ([[n]], [[n]]) Source #
intersectParamsTS
using the given tolerance.
Cutting Paths and Trails
cutBy :: (OrderedField n, Real n, InSpace V2 n t, SameSpace t s, ToPath t, ToPath s) => t -> s -> [[Located (Trail V2 n)]] Source #
Seperate a pathlike object into sections at every point it intersects a second pathlike object, returning a list of sections for each component trail.
cutByEx = onSections (squares `cutBy` line) colorLines <> stroke line where squares, line :: Path V2 Double squares = square 1 <> square 1 # rotate (1/8 @@ turn) line = hrule 2 colorLines = map (map lc) [ [ red, orange] , [blue, purple] ]
cutBy' :: (OrderedField n, Real n, InSpace V2 n t, SameSpace t s, ToPath t, ToPath s) => n -> t -> s -> [[Located (Trail V2 n)]] Source #
cutBy
using the given tolerance for calculating intersections.
cutPBy :: (OrderedField n, Real n) => Path V2 n -> Path V2 n -> [[Located (Trail V2 n)]] Source #
Seperate a path into sections at every point it intersects a second path, returning a list of sections for each component trail.
cutPBy' :: (OrderedField n, Real n) => n -> Path V2 n -> Path V2 n -> [[Located (Trail V2 n)]] Source #
cutPBy
using the given tolerance for calculating intersections.
cutTBy :: (OrderedField n, Real n) => Located (Trail V2 n) -> Path V2 n -> [Located (Trail V2 n)] Source #
Seperate a located trail into sections at every point it intersects a path.
cutTBy' :: (OrderedField n, Real n) => n -> Located (Trail V2 n) -> Path V2 n -> [Located (Trail V2 n)] Source #
cutTBy
using the given tolerance for calculating intersections.
Rad Explosions
explodeSegments :: (Metric v, OrderedField n) => Path v n -> [[Located (Trail v n)]] Source #
explodePath specialized to return located trails. This provides the compiler
the necessary type information to use it with onSections
without providing
a type annotation.
explodeSegmentsEx = onSections (explodeSegments squares) colorLines where squares = square 1 <> square 1 # rotate (1/8 @@ turn) colorLines = map (map lc) [ [ red, yellow, gold, orange] , [blue, violet, purple, indigo] ]
explodeIntersections :: (OrderedField n, Real n) => Path V2 n -> [[Located (Trail V2 n)]] Source #
Turn a path a list of component trails, then cut those segments at all their intersections.
explodeIntersectionsEx = onSections (explodeIntersections squares) colorLines where squares = square 1 <> square 1 # rotate (1/8 @@ turn) colorLines = map (map lc) [ [ gray, red, orange, yellow, green, blue, indigo, violet] , [black, crimson, darkorange, gold, darkgreen, darkblue, midnightblue, darkviolet] ]
explodeIntersections' :: (OrderedField n, Real n) => n -> Path V2 n -> [[Located (Trail V2 n)]] Source #
explodeIntersections
using the given tolerance for calculating intersections.
explodeBoth :: (OrderedField n, Real n) => Path V2 n -> [[[Located (Trail V2 n)]]] Source #
Turn a path into a list of component segments for each component trail, then cut those segments at all their intersections.
explodeBothEx = onSections (explodeBoth squares) colorLines where squares = square 1 <> square 1 # rotate (1/8 @@ turn) colorLines = map (map (map lc)) [ cycle [ [ gray, red, orange], [yellow, green, blue] ] , cycle [ [black, crimson, darkorange], [ gold, darkgreen, darkblue] ] ]
explodeBoth' :: (OrderedField n, Real n) => n -> Path V2 n -> [[[Located (Trail V2 n)]]] Source #
explodeBoth
using the given tolerance for calculating intersections.
Consuming Cut Paths
class OnSections ps fs b n | ps b -> fs n, fs -> b n where Source #
onSections :: ps -> fs -> QDiagram b V2 n Any Source #
Zipply apply an arbitrarily nested list of attributes to the same shape of lists of pathlike objects, monoidally combining the results.
See examples for cutBy
, explodeSegments
, explodeIntersections
, and explodeBoth
.