| Copyright | (c) 2013 diagrams-lib team (see LICENSE) |
|---|---|
| License | BSD-style (see LICENSE) |
| Maintainer | diagrams-discuss@googlegroups.com |
| Safe Haskell | None |
| Language | Haskell2010 |
Diagrams.Trace
Description
"Traces", aka embedded raytracers, for finding points on the edge of a diagram. See Diagrams.Core.Trace for internal implementation details.
Synopsis
- data Trace (v :: Type -> Type) n
- class (Additive (V a), Ord (N a)) => Traced a
- trace :: forall (v :: Type -> Type) n m b. (Metric v, OrderedField n, Semigroup m) => Lens' (QDiagram b v n m) (Trace v n)
- setTrace :: forall b (v :: Type -> Type) n m. (OrderedField n, Metric v, Semigroup m) => Trace v n -> QDiagram b v n m -> QDiagram b v n m
- withTrace :: (InSpace v n a, Metric v, OrderedField n, Monoid' m, Traced a) => a -> QDiagram b v n m -> QDiagram b v n m
- traceV :: (n ~ N a, Num n, Traced a) => Point (V a) n -> V a n -> a -> Maybe (V a n)
- traceP :: (n ~ N a, Traced a, Num n) => Point (V a) n -> V a n -> a -> Maybe (Point (V a) n)
- maxTraceV :: (n ~ N a, Num n, Traced a) => Point (V a) n -> V a n -> a -> Maybe (V a n)
- maxTraceP :: (n ~ N a, Num n, Traced a) => Point (V a) n -> V a n -> a -> Maybe (Point (V a) n)
- boundaryFrom :: (OrderedField n, Metric v, Semigroup m) => Subdiagram b v n m -> v n -> Point v n
- boundaryFromMay :: (Metric v, OrderedField n, Semigroup m) => Subdiagram b v n m -> v n -> Maybe (Point v n)
Types
data Trace (v :: Type -> Type) n Source #
Every diagram comes equipped with a trace. Intuitively, the trace for a diagram is like a raytracer: given a line (represented as a base point and a direction vector), the trace computes a sorted list of signed distances from the base point to all intersections of the line with the boundary of the diagram.
Note that the outputs are not absolute distances, but multipliers
relative to the input vector. That is, if the base point is p
and direction vector is v, and one of the output scalars is
s, then there is an intersection at the point p .+^ (s *^ v).
Instances
| Show (Trace v n) | |
| Ord n => Semigroup (Trace v n) | Traces form a semigroup with pointwise minimum as composition.
Hence, if |
| Ord n => Monoid (Trace v n) | |
| (Additive v, Ord n) => Traced (Trace v n) | |
| (Additive v, Num n) => Transformable (Trace v n) | |
| (Additive v, Num n) => HasOrigin (Trace v n) | |
| Wrapped (Trace v n) | |
| (Metric v, OrderedField n) => Alignable (Trace v n) Source # | |
Defined in Diagrams.Align Methods alignBy' :: (InSpace v0 n0 (Trace v n), Fractional n0, HasOrigin (Trace v n)) => (v0 n0 -> Trace v n -> Point v0 n0) -> v0 n0 -> n0 -> Trace v n -> Trace v n Source # defaultBoundary :: (V (Trace v n) ~ v0, N (Trace v n) ~ n0) => v0 n0 -> Trace v n -> Point v0 n0 Source # alignBy :: (InSpace v0 n0 (Trace v n), Fractional n0, HasOrigin (Trace v n)) => v0 n0 -> n0 -> Trace v n -> Trace v n Source # | |
| Rewrapped (Trace v n) (Trace v' n') | |
Defined in Diagrams.Core.Trace | |
| type V (Trace v n) | |
Defined in Diagrams.Core.Trace | |
| type N (Trace v n) | |
Defined in Diagrams.Core.Trace | |
| type Unwrapped (Trace v n) | |
Defined in Diagrams.Core.Trace | |
class (Additive (V a), Ord (N a)) => Traced a Source #
Traced abstracts over things which have a trace.
Minimal complete definition
Instances
| Traced b => Traced [b] | |
| Traced t => Traced (TransInv t) | |
| Traced b => Traced (Set b) | |
| (RealFloat n, Ord n) => Traced (CSG n) Source # | |
| (RealFloat n, Ord n) => Traced (Frustum n) Source # | |
| (Fractional n, Ord n) => Traced (Box n) Source # | |
| OrderedField n => Traced (Ellipsoid n) Source # | |
| (Traced a, Num (N a)) => Traced (Located a) Source # | The trace of a |
| (Traced a, Traced b, SameSpace a b) => Traced (a, b) | |
| (Additive v, Ord n) => Traced (Trace v n) | |
| (Additive v, Ord n) => Traced (Point v n) | The trace of a single point is the empty trace, i.e. the one which returns no intersection points for every query. Arguably it should return a single finite distance for vectors aimed directly at the given point, but due to floating-point inaccuracy this is problematic. Note that the envelope for a single point is not the empty envelope (see Diagrams.Core.Envelope). |
| Traced b => Traced (Map k b) | |
| OrderedField n => Traced (FixedSegment V2 n) Source # | |
Defined in Diagrams.TwoD.Segment Methods getTrace :: FixedSegment V2 n -> Trace (V (FixedSegment V2 n)) (N (FixedSegment V2 n)) Source # | |
| RealFloat n => Traced (Trail V2 n) Source # | |
| RealFloat n => Traced (Path V2 n) Source # | |
| TypeableFloat n => Traced (BoundingBox V3 n) Source # | |
Defined in Diagrams.BoundingBox Methods getTrace :: BoundingBox V3 n -> Trace (V (BoundingBox V3 n)) (N (BoundingBox V3 n)) Source # | |
| RealFloat n => Traced (BoundingBox V2 n) Source # | |
Defined in Diagrams.BoundingBox Methods getTrace :: BoundingBox V2 n -> Trace (V (BoundingBox V2 n)) (N (BoundingBox V2 n)) Source # | |
| OrderedField n => Traced (Segment Closed V2 n) Source # | |
| (Metric v, OrderedField n, Semigroup m) => Traced (QDiagram b v n m) | |
| (OrderedField n, Metric v, Semigroup m) => Traced (Subdiagram b v n m) | |