Safe Haskell | None |
---|---|
Language | Haskell2010 |
- type RubiksCubeBackend b = (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)
- solvedRubiksCube :: RubiksCube (Colour Double)
- drawSide :: RubiksCubeBackend b => V2 Double -> V2 Double -> Side (Colour Double) -> Diagram b
- drawFoldingPattern :: RubiksCubeBackend b => RubiksCube (Colour Double) -> Diagram b
- data Offsets = Offsets {}
- offsetX :: Lens' Offsets Double
- offsetY :: Lens' Offsets Double
- drawRubiksCube :: RubiksCubeBackend b => Offsets -> RubiksCube (Colour Double) -> Diagram b
- drawMove :: RubiksCubeBackend b => Move -> Offsets -> RubiksCube (Colour Double) -> Diagram b
- data MovesSettings = MovesSettings {}
- moveSep :: Lens' MovesSettings Double
- showStart :: Lens' MovesSettings Bool
- showEnd :: Lens' MovesSettings Bool
- offsets :: Lens' MovesSettings Offsets
- drawMoves :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b
- drawMovesBackward :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b
Documentation
type RubiksCubeBackend b = (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2) Source
solvedRubiksCube :: RubiksCube (Colour Double) Source
The solved cube.
Draws one 3x3 side of the cube.
drawFoldingPattern :: RubiksCubeBackend b => RubiksCube (Colour Double) -> Diagram b Source
Draw the folding pattern of the cube. The front side is at the center of the pattern.
drawRubiksCube :: RubiksCubeBackend b => Offsets -> RubiksCube (Colour Double) -> Diagram b Source
Draw the Rubik's cube in parallel perspective.
import Diagrams.RubiksCube import Control.Lens drawCubeExample = let c = solvedRubiksCube ^. undoMoves [R,U,R',U'] in drawRubiksCube with c
drawMove :: RubiksCubeBackend b => Move -> Offsets -> RubiksCube (Colour Double) -> Diagram b Source
Draw the Rubik's cube in parallel perspective with an arrow indicating the next move. If the the bottom layer is moved, the cube will be shown from below.
import Diagrams.RubiksCube import Control.Lens drawMoveExample = let c = solvedRubiksCube ^. undoMoves [L,U,L',U'] in drawMove L with c
:: RubiksCubeBackend b | |
=> MovesSettings | |
-> RubiksCube (Colour Double) | the start configuration |
-> [Move] | |
-> Diagram b |
Draws a sequence of moves.
import Diagrams.RubiksCube import Control.Lens drawMovesExample = let moves = [R, F', R', D', F, F] startPos = solvedRubiksCube ^. undoMoves moves settings = with & showStart .~ True in drawMoves settings startPos moves
:: RubiksCubeBackend b | |
=> MovesSettings | |
-> RubiksCube (Colour Double) | the end configuration |
-> [Move] | |
-> Diagram b |
Like drawMoves
, but takes the end configuration instead of the start
configuration. The previous example can be simplified with this:
import Diagrams.RubiksCube import Control.Lens drawMovesExample' = let moves = [R, F', R', D', F, F] endPos = solvedRubiksCube settings = with & showStart .~ True in drawMovesBackward settings endPos moves