Chart-1.9.3: A library for generating 2D Charts and Plots

Copyright | (c) Tim Docker 2006 2014
License | BSD-style (see chart/COPYRIGHT)
Safe Haskell | Safe
Language | Haskell98

Graphics.Rendering.Chart.Geometry

Contents

- Points and Vectors
- Paths
- Matrices

Description

Synopsis

- data Rect = Rect Point Point
- data Point = Point {
  - p_x :: Double
  - p_y :: Double
  }
- data Vector = Vector {
  - v_x :: Double
  - v_y :: Double
  }
- type RectSize = (Double, Double)
- type Range = (Double, Double)
- pointToVec :: Point -> Vector
- mkrect :: Point -> Point -> Point -> Point -> Rect
- rectPath :: Rect -> Path
- pvadd :: Point -> Vector -> Point
- pvsub :: Point -> Vector -> Point
- psub :: Point -> Point -> Vector
- vangle :: Vector -> Double
- vlen :: Vector -> Double
- vscale :: Double -> Vector -> Vector
- within :: Point -> Rect -> Bool
- intersectRect :: Limit Rect -> Limit Rect -> Limit Rect
- data RectEdge
  - = E_Top
  - | E_Bottom
  - | E_Left
  - | E_Right
- data Limit a
  - = LMin
  - | LValue a
  - | LMax
- type PointMapFn x y = (Limit x, Limit y) -> Point
- data Path
  - = MoveTo Point Path
  - | LineTo Point Path
  - | Arc Point Double Double Double Path
  - | ArcNeg Point Double Double Double Path
  - | End
  - | Close
- lineTo :: Point -> Path
- moveTo :: Point -> Path
- lineTo' :: Double -> Double -> Path
- moveTo' :: Double -> Double -> Path
- arc :: Point -> Double -> Double -> Double -> Path
- arc' :: Double -> Double -> Double -> Double -> Double -> Path
- arcNeg :: Point -> Double -> Double -> Double -> Path
- arcNeg' :: Double -> Double -> Double -> Double -> Double -> Path
- close :: Path
- foldPath :: Monoid m => (Point -> m) -> (Point -> m) -> (Point -> Double -> Double -> Double -> m) -> (Point -> Double -> Double -> Double -> m) -> m -> Path -> m
- makeLinesExplicit :: Path -> Path
- transformP :: Matrix -> Point -> Point
- scaleP :: Vector -> Point -> Point
- rotateP :: Double -> Point -> Point
- translateP :: Vector -> Point -> Point
- data Matrix = Matrix {
  - xx :: !Double
  - yx :: !Double
  - xy :: !Double
  - yy :: !Double
  - x0 :: !Double
  - y0 :: !Double
  }
- identity :: Matrix
- rotate :: Double -> Matrix -> Matrix
- scale :: Vector -> Matrix -> Matrix
- translate :: Vector -> Matrix -> Matrix
- scalarMultiply :: Double -> Matrix -> Matrix
- adjoint :: Matrix -> Matrix
- invert :: Matrix -> Matrix

# Points and Vectors

data Rect Source #

A rectangle is defined by two points.

Constructors

Rect Point Point |

#### Instances

Instances details

Show Rect Source # |
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods showsPrec :: Int -> Rect -> ShowS show :: Rect -> String showList :: [Rect] -> ShowS

data Point Source #

A point in two dimensions.

Constructors

Point |

Fields

- p_x :: Double
- p_y :: Double

#### Instances

Instances details

Show Point Source # |
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods showsPrec :: Int -> Point -> ShowS show :: Point -> String showList :: [Point] -> ShowS

data Vector Source #

A vector in two dimensions.

Constructors

Vector |

Fields

- v_x :: Double
- v_y :: Double

#### Instances

Instances details

Show Vector Source # |
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods showsPrec :: Int -> Vector -> ShowS show :: Vector -> String showList :: [Vector] -> ShowS

type RectSize = (Double, Double) Source #

type Range = (Double, Double) Source #

pointToVec :: Point -> Vector Source #

Convert a `Point` to a `Vector`.

mkrect :: Point -> Point -> Point -> Point -> Rect Source #

Create a rectangle based upon the coordinates of 4 points.

rectPath :: Rect -> Path Source #

Make a path from a rectangle.

pvadd :: Point -> Vector -> Point Source #

Add a point and a vector.

pvsub :: Point -> Vector -> Point Source #

Subtract a vector from a point.

psub :: Point -> Point -> Vector Source #

Subtract two points.

vangle :: Vector -> Double Source #

Angle of a vector (counterclockwise from positive x-axis)

vlen :: Vector -> Double Source #

Length/magnitude of a vector

vscale :: Double -> Vector -> Vector Source #

Scale a vector by a constant.

within :: Point -> Rect -> Bool Source #

Test if a point is within a rectangle.

intersectRect :: Limit Rect -> Limit Rect -> Limit Rect Source #

Intersects the rectangles. If they intersect the intersection rectangle is returned. `LMin` is the empty rectangle / intersection and `LMax` is the infinite plane.

data RectEdge Source #

Edge of a rectangle.

Constructors

E_Top |
E_Bottom |
E_Left |
E_Right |

data Limit a Source #

Constructors

LMin |
LValue a |
LMax |

#### Instances

Instances details

Show a => Show (Limit a) Source # |
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods showsPrec :: Int -> Limit a -> ShowS show :: Limit a -> String showList :: [Limit a] -> ShowS

type PointMapFn x y = (Limit x, Limit y) -> Point Source #

A function mapping between points.

# Paths

data Path Source #

The path type used by Charts.

A path can consist of several subpaths. Each is started by a `MoveTo` operation. All subpaths are open, except the last one, which may be closed using the `Close` operation. When filling a path all subpaths are closed implicitly.

Closing a subpath means that a line is drawn from the end point to the start point of the subpath.

If a `Arc` (or `ArcNeg`) is drawn a implicit line from the last end point of the subpath is drawn to the beginning of the arc. Another implicit line is drawn from the end of an arc to the beginning of the next path segment.

The beginning of a subpath is either (0,0) or set by a `MoveTo` instruction. If the first subpath is started with an arc the beginning of that subpath is the beginning of the arc.

Constructors

MoveTo Point Path |
LineTo Point Path |
Arc Point Double Double Double Path |
ArcNeg Point Double Double Double Path |
End |
Close |

#### Instances

Instances details

Semigroup Path Source # | Paths are monoids. After a path is closed you can not append anything to it anymore. The empty path is open. Use `close` to close a path.
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods (<>) :: Path -> Path -> Path sconcat :: NonEmpty Path -> Path stimes :: Integral b => b -> Path -> Path
Monoid Path Source # |
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods mempty :: Path mappend :: Path -> Path -> Path mconcat :: [Path] -> Path

lineTo :: Point -> Path Source #

Move the paths pointer to the given location and draw a straight line while doing so.

moveTo :: Point -> Path Source #

Move the paths pointer to the given location.

lineTo' :: Double -> Double -> Path Source #

Short-cut for `lineTo`, if you don't want to create a `Point`.

moveTo' :: Double -> Double -> Path Source #

Short-cut for `moveTo`, if you don't want to create a `Point`.

arc Source #

Arguments

:: Point | Center point of the circle arc.
-> Double | Radius of the circle.
-> Double | Angle to start drawing at, in radians.
-> Double | Angle to stop drawing at, in radians.
-> Path |

Draw the arc of a circle. A straight line connects the end of the previous path with the beginning of the arc. The zero angle points in direction of the positive x-axis. Angles increase in clock-wise direction. If the stop angle is smaller then the start angle it is increased by multiples of `2 * pi` until is is greater or equal.

arc' :: Double -> Double -> Double -> Double -> Double -> Path Source #

Short-cut for `arc`, if you don't want to create a `Point`.

arcNeg :: Point -> Double -> Double -> Double -> Path Source #

Like `arc`, but draws from the stop angle to the start angle instead of between them.

arcNeg' :: Double -> Double -> Double -> Double -> Double -> Path Source #

Short-cut for `arcNeg`, if you don't want to create a `Point`.

close :: Path Source #

A closed empty path. Closes a path when appended.

foldPath Source #

Arguments

:: Monoid m |
=> (Point -> m) | MoveTo
-> (Point -> m) | LineTo
-> (Point -> Double -> Double -> Double -> m) | Arc
-> (Point -> Double -> Double -> Double -> m) | ArcNeg
-> m | Close
-> Path | Path to fold
-> m |

Fold the given path to a monoid structure.

makeLinesExplicit :: Path -> Path Source #

Enriches the path with explicit instructions to draw lines, that otherwise would be implicit. See `Path` for details about what lines in paths are implicit.

# Matrices

transformP :: Matrix -> Point -> Point Source #

Transform a point using the given matrix.

scaleP :: Vector -> Point -> Point Source #

Scale a point.

rotateP :: Double -> Point -> Point Source #

Rotate a point around the origin. The angle is given in radians.

translateP :: Vector -> Point -> Point Source #

Translate a point.

data Matrix Source #

Copied from Graphics.Rendering.Cairo.Matrix

Constructors

Matrix |

Fields

- xx :: !Double
- yx :: !Double
- xy :: !Double
- yy :: !Double
- x0 :: !Double
- y0 :: !Double

#### Instances

Instances details

Num Matrix Source # | Copied from Graphics.Rendering.Cairo.Matrix
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods (+) :: Matrix -> Matrix -> Matrix (-) :: Matrix -> Matrix -> Matrix (*) :: Matrix -> Matrix -> Matrix negate :: Matrix -> Matrix abs :: Matrix -> Matrix signum :: Matrix -> Matrix fromInteger :: Integer -> Matrix
Show Matrix Source # |
Instance details Defined in Graphics.Rendering.Chart.Geometry Methods showsPrec :: Int -> Matrix -> ShowS show :: Matrix -> String showList :: [Matrix] -> ShowS

identity :: Matrix Source #

Copied from Graphics.Rendering.Cairo.Matrix

rotate :: Double -> Matrix -> Matrix Source #

Copied from Graphics.Rendering.Cairo.Matrix Rotations angle is given in radians.

scale :: Vector -> Matrix -> Matrix Source #

Copied and adopted from Graphics.Rendering.Cairo.Matrix

translate :: Vector -> Matrix -> Matrix Source #

Copied and adopted from Graphics.Rendering.Cairo.Matrix

scalarMultiply :: Double -> Matrix -> Matrix Source #

Copied from Graphics.Rendering.Cairo.Matrix

adjoint :: Matrix -> Matrix Source #

Copied from Graphics.Rendering.Cairo.Matrix

invert :: Matrix -> Matrix Source #

Copied from Graphics.Rendering.Cairo.Matrix