Copyright | (c) 2011 Michael Sloan |
---|---|
License | BSD-style (see LICENSE) |
Maintainer | Michael Sloan <mgsloan at gmail>, Deepak Jois <deepak.jois@gmail.com> |
Safe Haskell | None |
Language | Haskell2010 |
Authors : Michael Sloan at gmail, Deepak Jois deepak.jois@gmail.com
A module consisting of core types and functions to represent and operate on a "turtle".
More info about turtle graphics: http://en.wikipedia.org/wiki/Turtle_graphics
- data TurtleState = TurtleState {}
- data TurtlePath = TurtlePath {}
- data PenStyle = PenStyle {}
- forward :: Double -> TurtleState -> TurtleState
- backward :: Double -> TurtleState -> TurtleState
- left :: Double -> TurtleState -> TurtleState
- right :: Double -> TurtleState -> TurtleState
- setPenColor :: Colour Double -> TurtleState -> TurtleState
- setPenColour :: Colour Double -> TurtleState -> TurtleState
- setPenWidth :: Double -> TurtleState -> TurtleState
- startTurtle :: TurtleState
- setHeading :: Double -> TurtleState -> TurtleState
- towards :: P2 -> TurtleState -> TurtleState
- setPenPos :: P2 -> TurtleState -> TurtleState
- penUp :: TurtleState -> TurtleState
- penDown :: TurtleState -> TurtleState
- penHop :: TurtleState -> TurtleState
- closeCurrent :: TurtleState -> TurtleState
- traceTurtle :: TurtleState -> TurtleState
- getTurtleDiagram :: Renderable (Path R2) b => TurtleState -> Diagram b R2
- getTurtlePath :: TurtleState -> Path R2
Turtle data types and accessors
data TurtleState Source
Core turtle data type. A turtle needs to keep track of its current position, like its position, heading etc., and all the paths that it has traversed so far.
We need to record a new path, everytime an attribute like style, pen position etc changes, so that we can separately track styles for each portion of the eventual path that the turtle took.
TurtleState | |
|
data TurtlePath Source
Turtle path type that captures a list of paths and the style attributes associated with them
Style attributes associated with the turtle pen
Motion commands
:: Double | Distance to move |
-> TurtleState | Turtle to move |
-> TurtleState | Resulting turtle |
Move the turtle forward by x
units
:: Double | Distance to move |
-> TurtleState | Turtle to move |
-> TurtleState | Resulting turtle |
Move the turtle backward by x
units
:: Double | Degree of turn |
-> TurtleState | Turtle to turn |
-> TurtleState | Resulting turtle |
Turn the turtle anti-clockwise (left)
:: Double | Degree of turn |
-> TurtleState | Turtle to turn |
-> TurtleState | Resulting turtle |
Turn the turtle clockwise (right)
Pen style commands
:: Colour Double | Width of Pen |
-> TurtleState | Turtle to change |
-> TurtleState | Resulting Turtle |
alias of setPenColour
:: Colour Double | Width of Pen |
-> TurtleState | Turtle to change |
-> TurtleState | Resulting Turtle |
Set a new pen color for turtle.
If pen is down, this adds the current trail to paths
and starts a new empty
trail.
:: Double | Width of Pen |
-> TurtleState | Turtle to change |
-> TurtleState | Resulting Turtle |
Set a new pen width for turtle.
If pen is down, this adds the current trail to paths
and starts a new empty
trail.
State setters
startTurtle :: TurtleState Source
The initial state of turtle. The turtle is located at the origin, at an
orientation of 0 degrees with its pen position down. The pen style is
defaultPenStyle
.
:: Double | Degree of orientation |
-> TurtleState | Turtle to orient |
-> TurtleState | Resulting turtle |
Turn the turtle to the given orientation, in degrees
:: P2 | Point to orient turtle towards |
-> TurtleState | Turtle to orient |
-> TurtleState | Resulting turtle |
Sets the turtle orientation towards a given location.
:: P2 | Position to place true |
-> TurtleState | Turtle to position |
-> TurtleState | Resulting turtle |
Set the turtle X/Y position.
If pen is down and the current trail is non-empty, this will also add the
current trail to the paths
field.
Drawing control
:: TurtleState | Turtle to modify |
-> TurtleState | Resulting turtle |
Puts the turtle pen in “Up” mode. Turtle movements will not draw anything
Does nothing if the pen was already up. Otherwise, it creates a turtle with
the current trail added to paths
.
:: TurtleState | Turtle to modify |
-> TurtleState | Resulting turtle |
Puts the turtle pen in “Down” mode. Turtle movements will cause drawing to happen
Does nothing if the pen was already down. Otherwise, starts a new trail starting at the current position.
penHop :: TurtleState -> TurtleState Source
Debugging
traceTurtle :: TurtleState -> TurtleState Source
Prints out turtle representation and returns it. Use for debugging
Diagram related
getTurtleDiagram :: Renderable (Path R2) b => TurtleState -> Diagram b R2 Source
Creates a diagram from a turtle
Applies the styles to each trails in paths
separately and combines them
into a single diagram
getTurtlePath :: TurtleState -> Path R2 Source
Creates a path from a turtle, ignoring the styles.