Chart-1.5.4: 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

Show Rect Source |

data Point Source

A point in two dimensions.

Constructors

Point |

Fields

p_x :: Double
p_y :: Double

Instances

Show Point Source |

data Vector Source

A vector in two dimensions.

Constructors

Vector |

Fields

v_x :: Double
v_y :: Double

Instances

Show Vector Source |

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

Show a => Show (Limit a) Source |

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

Monoid 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.

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

Num Matrix Source | Copied from Graphics.Rendering.Cairo.Matrix
Show Matrix Source |

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