Safe Haskell  None 

Language  Haskell2010 
 data Line d r = Line {
 _anchorPoint :: Point d r
 _direction :: Vector d r
 direction :: forall d r. Lens' (Line d r) (Vector d r)
 anchorPoint :: forall d r. Lens' (Line d r) (Point d r)
 lineThrough :: (Num r, Arity d) => Point d r > Point d r > Line d r
 verticalLine :: Num r => r > Line 2 r
 horizontalLine :: Num r => r > Line 2 r
 perpendicularTo :: Num r => Line 2 r > Line 2 r
 isIdenticalTo :: (Eq r, Arity d) => Line d r > Line d r > Bool
 isParallelTo :: (Eq r, Fractional r, Arity d) => Line d r > Line d r > Bool
 onLine :: (Eq r, Fractional r, Arity d) => Point d r > Line d r > Bool
 sqDistanceTo :: (Fractional r, Arity d) => Point d r > Line d r > r
 sqDistanceToArg :: (Fractional r, Arity d) => Point d r > Line d r > (r, Point d r)
 class HasSupportingLine t where
 supportingLine :: t > Line (Dimension t) (NumType t)
 fromLinearFunction :: Num r => r > r > Line 2 r
 toLinearFunction :: forall r. (Fractional r, Eq r) => Line 2 r > Maybe (r, r)
 data SideTest
 onSide :: (Ord r, Num r) => Point 2 r > Line 2 r > SideTest
 liesAbove :: (Ord r, Num r) => Point 2 r > Line 2 r > Bool
 bisector :: Fractional r => Point 2 r > Point 2 r > Line 2 r
ddimensional Lines
A line is given by an anchor point and a vector indicating the direction.
Line  

Arity d => Functor (Line d) Source  
Arity d => Foldable (Line d) Source  
Arity d => Traversable (Line d) Source  
(Eq r, Arity d) => Eq (Line d r) Source  
(Show r, Arity d) => Show (Line d r) Source  
HasSupportingLine (Line d r) Source  
(Eq r, Fractional r) => IsIntersectableWith (Line 2 r) (Line 2 r) Source  
(Ord r, Floating r) => IsIntersectableWith (Line 2 r) (Circle p r) Source  
(Fractional r, Ord r, HasBoundingLines o) => IsIntersectableWith (Line 2 r) (Slab o a r) Source  
(Ord r, Fractional r) => IsIntersectableWith (LineSegment 2 p r) (Line 2 r) Source  
type NumType (Line d r) = r Source  
type Dimension (Line d r) = d Source  
type IntersectionOf (Line 2 r) (Boundary (Rectangle p r)) = (:) * NoIntersection ((:) * (Point 2 r) ((:) * (Point 2 r, Point 2 r) ((:) * (LineSegment 2 () r) ([] *)))) Source  
type IntersectionOf (Line 2 r) (Line 2 r) = (:) * NoIntersection ((:) * (Point 2 r) ((:) * (Line 2 r) ([] *))) Source  The intersection of two lines is either: NoIntersection, a point or a line. 
type IntersectionOf (Line 2 r) (Rectangle p r) = (:) * NoIntersection ((:) * (Point 2 r) ((:) * (LineSegment 2 () r) ([] *))) Source  
type IntersectionOf (Line 2 r) (Circle p r) = (:) * NoIntersection ((:) * (Touching (Point 2 r)) ((:) * (Point 2 r, Point 2 r) ([] *))) Source  No intersection, one touching point, or two points 
type IntersectionOf (HalfLine 2 r) (Line 2 r) = (:) * NoIntersection ((:) * (Point 2 r) ((:) * (HalfLine 2 r) ([] *))) Source  
type IntersectionOf (Line 2 r) (Slab o a r) = (:) * NoIntersection ((:) * (Line 2 r) ((:) * (LineSegment 2 a r) ([] *))) Source  
type IntersectionOf (LineSegment 2 p r) (Line 2 r) = (:) * NoIntersection ((:) * (Point 2 r) ((:) * (LineSegment 2 p r) ([] *))) Source 
anchorPoint :: forall d r. Lens' (Line d r) (Point d r) Source
Functions on lines
lineThrough :: (Num r, Arity d) => Point d r > Point d r > Line d r Source
A line may be constructed from two points.
verticalLine :: Num r => r > Line 2 r Source
horizontalLine :: Num r => r > Line 2 r Source
perpendicularTo :: Num r => Line 2 r > Line 2 r Source
Given a line l with anchor point p, get the line perpendicular to l that also goes through p.
isIdenticalTo :: (Eq r, Arity d) => Line d r > Line d r > Bool Source
Test if two lines are identical, meaning; if they have exactly the same anchor point and directional vector.
isParallelTo :: (Eq r, Fractional r, Arity d) => Line d r > Line d r > Bool Source
Test if the two lines are parallel.
>>>
lineThrough origin (point2 1 0) `isParallelTo` lineThrough (point2 1 1) (point2 2 1)
True>>>
lineThrough origin (point2 1 0) `isParallelTo` lineThrough (point2 1 1) (point2 2 2)
False
onLine :: (Eq r, Fractional r, Arity d) => Point d r > Line d r > Bool Source
Test if point p lies on line l
>>>
origin `onLine` lineThrough origin (point2 1 0)
True>>>
point2 10 10 `onLine` lineThrough origin (point2 2 2)
True>>>
point2 10 5 `onLine` lineThrough origin (point2 2 2)
False
sqDistanceTo :: (Fractional r, Arity d) => Point d r > Line d r > r Source
Squared distance from point p to line l
sqDistanceToArg :: (Fractional r, Arity d) => Point d r > Line d r > (r, Point d r) Source
The squared distance between the point p and the line l, and the point m realizing this distance.
Supporting Lines
class HasSupportingLine t where Source
Types for which we can compute a supporting line, i.e. a line that contains the thing of type t.
supportingLine :: t > Line (Dimension t) (NumType t) Source
HasSupportingLine (Line d r) Source  
HasSupportingLine (HalfLine d r) Source  
(Num r, Arity d) => HasSupportingLine (LineSegment d p r) Source 
Convenience functions on Two dimensional lines
fromLinearFunction :: Num r => r > r > Line 2 r Source
Create a line from the linear function ax + b
toLinearFunction :: forall r. (Fractional r, Eq r) => Line 2 r > Maybe (r, r) Source
get values a,b s.t. the input line is described by y = ax + b. returns Nothing if the line is vertical
Result of a side test
onSide :: (Ord r, Num r) => Point 2 r > Line 2 r > SideTest Source
Given a point q and a line l, compute to which side of l q lies. For vertical lines the left side of the line is interpeted as below.
>>>
point2 10 10 `onSide` (lineThrough origin $ point2 10 5)
Above>>>
point2 10 10 `onSide` (lineThrough origin $ point2 (10) 5)
Above>>>
point2 5 5 `onSide` (verticalLine 10)
Below>>>
point2 5 5 `onSide` (lineThrough origin $ point2 (3) (3))
On