parallelogram_maze {mazealls} | R Documentation |
parallelogram_maze .
Description
Recursively draw a parallelogram maze, with the first side consisting of
height
segments of length unit_len
, and the second side
width
segments of length unit_len
. The angle between
the first and second side may be set.
Usage
parallelogram_maze(unit_len, height, width = height, angle = 90,
clockwise = TRUE, method = c("two_parallelograms", "four_parallelograms",
"uniform", "random"), start_from = c("midpoint", "corner"), balance = 0,
height_boustro = c(1, 1), width_boustro = c(1, 1),
draw_boundary = FALSE, num_boundary_holes = 2, boundary_lines = TRUE,
boundary_holes = NULL, boundary_hole_color = NULL,
boundary_hole_locations = NULL, boundary_hole_arrows = FALSE,
end_side = 1)
Arguments
unit_len |
the unit length in graph coordinates. This controls the width of the ‘holes’ in the boundary lines and generally controls the spacing of mazes. |
height |
the length of the first side in numbers of |
width |
the length of the second side in numbers of |
angle |
the angle (in degrees) between the first and second sides. Note that this is the angle that the Turtle turns when rounding the first corner, so it is the internal angle at the starting point (if starting from a corner), and the external angle at the second corner. |
clockwise |
whether to draw clockwise. |
method |
there are many ways to recursive draw an isosceles trapezoid. The following values are acceptable:
|
start_from |
whether to start from the midpoint of the first side of a maze, or from the corner facing the first side. |
balance |
for the |
height_boustro |
an array of two values, which help determine
the location of holes in internal lines of length
|
width_boustro |
an array of two values, which help determine
the location of any split along lines which are length |
draw_boundary |
a boolean indicating whether a final boundary shall be drawn around the maze. |
num_boundary_holes |
the number of boundary sides which should be
randomly selected to have holes. Note that the |
boundary_lines |
indicates which of the sides of the maze shall have drawn boundary lines. Can be a logical array indicating which sides shall have lines, or a numeric array, giving the index of sides that shall have lines. |
boundary_holes |
an array indicating which of the boundary lines
have holes. If |
boundary_hole_color |
the color of boundary holes. A value of
|
boundary_hole_locations |
the ‘locations’ of the boundary holes
within each boundary segment.
A value of |
boundary_hole_arrows |
a boolean or boolean array indicating whether to draw perpendicular double arrows at the boundary holes, as a visual guide. These can be useful for locating the entry and exit points of a maze. |
end_side |
the number of the side to end on. A value of
1 corresponds to the starting side, while higher numbers
correspond to the drawn side of the figure in the canonical order
(that is, the order induced by the |
Details
Draws a maze in an parallelogram, starting from the midpoint
of the first side (or the corner before the first side via the
start_from
option). Can recursively subdivide into two or
four parallelograms. The first (and third) side shall consist of height
segments of length unit_len
. The second and fourth side consist of
width
segments of length unit_len
. The angle between them is
angle
. Here is an example maze:
This function admits a balance
parameter which controls
how the maze should be recursively subdivided. A negative value creates
imbalanced mazes, while positive values create more uniform mazes. Here are
create seven mazes created side by side with an increasing balance
parameter:
Value
nothing; the function is called for side effects only, though in the future this might return information about the drawn boundary of the shape.
Author(s)
Steven E. Pav shabbychef@gmail.com
Examples
library(TurtleGraphics)
turtle_init(500,300,mode='clip')
turtle_hide()
turtle_up()
turtle_do({
turtle_setpos(15,15)
turtle_setangle(0)
parallelogram_maze(angle=90,unit_len=10,width=45,height=25,method='uniform',
start_from='corner',draw_boundary=TRUE)
})
# testing imbalance condition
turtle_init(400,500,mode='clip')
turtle_hide()
turtle_up()
turtle_do({
turtle_setpos(15,250)
turtle_setangle(0)
parallelogram_maze(angle=90,unit_len=10,width=30,height=40,
method='two_parallelograms',draw_boundary=TRUE,balance=-1.0)
})
# a bunch of imbalanced mazes, fading into each other
turtle_init(850,400,mode='clip')
turtle_hide()
turtle_up()
turtle_do({
turtle_setpos(15,200)
turtle_setangle(0)
valseq <- seq(from=-1.5,to=1.5,length.out=4)
blines <- c(1,2,3,4)
bholes <- c(1,3)
set.seed(12354)
for (iii in seq_along(valseq)) {
parallelogram_maze(angle=90,unit_len=10,width=20,height=25,
method='two_parallelograms',draw_boundary=TRUE,balance=valseq[iii],
end_side=3,boundary_lines=blines,boundary_holes=bholes)
turtle_right(180)
blines <- c(2,3,4)
bholes <- c(3)
}
})
# a somewhat 'boustrophedonic' maze
turtle_init(500,300,mode='clip')
turtle_hide()
turtle_up()
turtle_do({
turtle_setpos(15,15)
turtle_setangle(0)
parallelogram_maze(angle=90,unit_len=10,width=47,height=27,
method='two_parallelograms', height_boustro=c(21,3),width_boustro=c(21,3),balance=-0.25,
start_from='corner',draw_boundary=TRUE)
})