| Copyright | (c) Justus Sagemüller 2020 | 
|---|---|
| License | GPL v3 | 
| Maintainer | (@) jsag $ hvl.no | 
| Stability | experimental | 
| Portability | portable | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Data.Manifold.WithBoundary
Contents
Description
Synopsis
- class SemimanifoldWithBoundary m where
- type Interior m :: Type
 - type Boundary m :: Type
 - type HalfNeedle m :: Type
 - (.+^|) :: m -> Needle (Interior m) -> Either (Boundary m, Scalar (Needle (Interior m))) (Interior m)
 - fromInterior :: Interior m -> m
 - fromBoundary :: Boundary m -> m
 - (|+^) :: Boundary m -> HalfNeedle m -> m
 - separateInterior :: m -> Either (Boundary m) (Interior m)
 - toInterior :: m -> Maybe (Interior m)
 - extendToBoundary :: Interior m -> Needle (Interior m) -> Maybe (Boundary m)
 - smfdWBoundWitness :: SmfdWBoundWitness m
 - needleIsOpenMfd :: (OpenManifold (Needle (Interior m)) => r) -> r
 - scalarIsOpenMfd :: (OpenManifold (Scalar (Needle (Interior m))) => r) -> r
 - boundaryHasSameScalar :: ((LinearSpace (Needle (Boundary m)), Scalar (Needle (Boundary m)) ~ Scalar (Needle (Interior m))) => r) -> r
 
 - class (SemimanifoldWithBoundary m, PseudoAffine (Interior m), PseudoAffine (Boundary m)) => PseudoAffineWithBoundary m where
 - class PseudoAffineWithBoundary m => ProjectableBoundary m where
- projectToBoundary :: m -> Boundary m -> Maybe (Needle (Boundary m), Scalar (Needle (Interior m)))
 - marginFromBoundary :: Boundary m -> Scalar (Needle (Interior m)) -> m
 - needleBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Needle (Interior m)) => r) -> r
 - scalarBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Scalar (Needle (Interior m))) => r) -> r
 
 - data SmfdWBoundWitness m where
- OpenManifoldWitness :: forall m. OpenManifold m => SmfdWBoundWitness m
 - SmfdWBoundWitness :: forall m. (OpenManifold (Interior m), OpenManifold (Boundary m), FullSubspace (HalfNeedle m) ~ Needle (Boundary m)) => SmfdWBoundWitness m
 
 - class AdditiveMonoid h where
 - class AdditiveMonoid h => HalfSpace h where
- type FullSubspace h
 - type Ray h
 - type MirrorJoin h
 - scaleNonNeg :: Ray h -> h -> h
 - fromFullSubspace :: FullSubspace h -> h
 - projectToFullSubspace :: h -> FullSubspace h
 - fullSubspaceIsVectorSpace :: ((VectorSpace (FullSubspace h), ScalarSpace (Scalar (FullSubspace h)), Scalar (FullSubspace h) ~ MirrorJoin (Ray h)) => r) -> r
 - rayIsHalfSpace :: (HalfSpace (Ray h) => r) -> r
 - mirrorJoinIsVectorSpace :: ((VectorSpace (MirrorJoin h), Scalar (MirrorJoin h) ~ MirrorJoin (Ray h)) => r) -> r
 - fromPositiveHalf :: h -> MirrorJoin h
 - fromNegativeHalf :: h -> MirrorJoin h
 
 
Documentation
class SemimanifoldWithBoundary m where Source #
The class of spaces with a displacement operation like Semimanifold, but there
   may be a limited range how far it is possible to move before leaving the space.
Such spaces decompose into two Semimanifold spaces: the Interior and the Boundary.
Minimal complete definition
Associated Types
type Interior m :: Type Source #
Subspace of m representing the set of points where it is possible to move at
   least a small distance in any direction (with .+^|) without leaving m.
type Boundary m :: Type Source #
The set of points where an infinitesimal movement is sufficient to leave m.
type HalfNeedle m :: Type Source #
Methods
Arguments
| :: m | Starting point   | 
| -> Needle (Interior m) | Displacement   | 
| -> Either (Boundary m, Scalar (Needle (Interior m))) (Interior m) | If   | 
Boundary-aware pendant to .+~^.
fromInterior :: Interior m -> m Source #
fromBoundary :: Boundary m -> m Source #
(|+^) :: Boundary m -> HalfNeedle m -> m Source #
separateInterior :: m -> Either (Boundary m) (Interior m) Source #
toInterior :: m -> Maybe (Interior m) Source #
extendToBoundary :: Interior m -> Needle (Interior m) -> Maybe (Boundary m) Source #
default extendToBoundary :: (VectorSpace (Needle (Interior m)), Num (Scalar (Needle (Interior m)))) => Interior m -> Needle (Interior m) -> Maybe (Boundary m) Source #
smfdWBoundWitness :: SmfdWBoundWitness m Source #
default smfdWBoundWitness :: (OpenManifold (Interior m), OpenManifold (Boundary m), FullSubspace (HalfNeedle m) ~ Needle (Boundary m)) => SmfdWBoundWitness m Source #
needleIsOpenMfd :: (OpenManifold (Needle (Interior m)) => r) -> r Source #
default needleIsOpenMfd :: OpenManifold (Needle (Interior m)) => (OpenManifold (Needle (Interior m)) => r) -> r Source #
scalarIsOpenMfd :: (OpenManifold (Scalar (Needle (Interior m))) => r) -> r Source #
default scalarIsOpenMfd :: OpenManifold (Scalar (Needle (Interior m))) => (OpenManifold (Scalar (Needle (Interior m))) => r) -> r Source #
boundaryHasSameScalar :: ((LinearSpace (Needle (Boundary m)), Scalar (Needle (Boundary m)) ~ Scalar (Needle (Interior m))) => r) -> r Source #
Instances
class (SemimanifoldWithBoundary m, PseudoAffine (Interior m), PseudoAffine (Boundary m)) => PseudoAffineWithBoundary m where Source #
Methods
(.--!) :: m -> m -> Needle (Interior m) Source #
Inverse of .+^|, provided the space is connected. For p :: Interior m, q :: m
   and v = fromInterior p.--!q,
  q .+^| v ≡ Right p
  (up to floating-point). Similary, for b :: Boundary m and w = fromBoundary m.--!q,
  q .+^| w ≡ Left (b, 0)
  (.-|) :: m -> Boundary m -> Maybe (HalfNeedle m) Source #
(!-|) :: m -> Boundary m -> HalfNeedle m Source #
Instances
class PseudoAffineWithBoundary m => ProjectableBoundary m where Source #
Minimal complete definition
Methods
Arguments
| :: m | Point   | 
| -> Boundary m | Intended “course region” representative   | 
| -> Maybe (Needle (Boundary m), Scalar (Needle (Interior m))) | Needle   | 
marginFromBoundary :: Boundary m -> Scalar (Needle (Interior m)) -> m Source #
needleBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Needle (Interior m)) => r) -> r Source #
default needleBoundaryIsTriviallyProjectible :: ProjectableBoundary (Needle (Interior m)) => (ProjectableBoundary (Needle (Interior m)) => r) -> r Source #
scalarBoundaryIsTriviallyProjectible :: forall r. (ProjectableBoundary (Scalar (Needle (Interior m))) => r) -> r Source #
default scalarBoundaryIsTriviallyProjectible :: ProjectableBoundary (Scalar (Needle (Interior m))) => (ProjectableBoundary (Scalar (Needle (Interior m))) => r) -> r Source #
Instances
data SmfdWBoundWitness m where Source #
Constructors
| OpenManifoldWitness :: forall m. OpenManifold m => SmfdWBoundWitness m | |
| SmfdWBoundWitness :: forall m. (OpenManifold (Interior m), OpenManifold (Boundary m), FullSubspace (HalfNeedle m) ~ Needle (Boundary m)) => SmfdWBoundWitness m | 
class AdditiveMonoid h where #
Minimal complete definition
Nothing
Instances
| AdditiveMonoid Int16 | |
| AdditiveMonoid Int32 | |
| AdditiveMonoid Int64 | |
| AdditiveMonoid Int8 | |
| AdditiveMonoid Word16 | |
| AdditiveMonoid Word32 | |
| AdditiveMonoid Word64 | |
| AdditiveMonoid Word8 | |
| AdditiveMonoid Integer | |
| AdditiveMonoid Double | |
| AdditiveMonoid Float | |
| AdditiveMonoid Int | |
| AdditiveMonoid Word | |
| Num k => AdditiveMonoid (Cℝay (ZeroDim k)) | |
| AdditiveGroup (Needle (Rep a Void)) => AdditiveMonoid (GenericNeedle a) | |
Defined in Data.Monoid.Additive  | |
| AdditiveMonoid (ZeroDim k) | |
| (AdditiveMonoid h, AdditiveMonoid i) => AdditiveMonoid (h, i) | |
Defined in Data.Monoid.Additive  | |
| AdditiveMonoid h => AdditiveMonoid (Rec0 h s) | |
| (AdditiveMonoid h, AdditiveMonoid i, AdditiveMonoid j) => AdditiveMonoid (h, i, j) | |
Defined in Data.Monoid.Additive  | |
| (AdditiveMonoid (f p), AdditiveMonoid (g p)) => AdditiveMonoid ((f :*: g) p) | |
| AdditiveMonoid (f p) => AdditiveMonoid (M1 i c f p) | |
class AdditiveMonoid h => HalfSpace h where #
Minimal complete definition
Nothing
Associated Types
type FullSubspace h #
type FullSubspace h = GenericFullSubspace h
type MirrorJoin h #
type MirrorJoin h = GenericMirrorJoin h
Methods
scaleNonNeg :: Ray h -> h -> h #
fromFullSubspace :: FullSubspace h -> h #
projectToFullSubspace :: h -> FullSubspace h #
fullSubspaceIsVectorSpace :: ((VectorSpace (FullSubspace h), ScalarSpace (Scalar (FullSubspace h)), Scalar (FullSubspace h) ~ MirrorJoin (Ray h)) => r) -> r #
rayIsHalfSpace :: (HalfSpace (Ray h) => r) -> r #
mirrorJoinIsVectorSpace :: ((VectorSpace (MirrorJoin h), Scalar (MirrorJoin h) ~ MirrorJoin (Ray h)) => r) -> r #
fromPositiveHalf :: h -> MirrorJoin h #
fromNegativeHalf :: h -> MirrorJoin h #