Tiles

- random arrays

A geometric tile pattern is formed when individual square tiles are fitted together without gaps or overlaps. Each tile has 4 rotations (90, 180 or 270 degrees).

The resulting pattern is a regular array of randomly orientated tiles. Some random gray grout lines are drawn.

The screen is then filled from the top right corner to highlight any enclosed areas within the grid of tiles. Each tile is filled with random dark red, green or purple color.

To New
  # set default screen, pen and turtle values
  ResetAll SetScreenSize [400 400] HideTurtle
  SetSC Black SetPC Green SetPS 1 PenUp
End

To GridSq :Order :Side
  # draw tile at each column x row position
  LocalMake "Offset (1+:Order)/2
  LocalMake "Ps [] LocalMake "Total :Order*:Order
  Repeat :Total [Make "Ps LPut RepCount :Ps]
  Repeat :Total [
    LocalMake "P Pick :Ps
    LocalMake "Ps Remove :P :Ps
    LocalMake "Col 1+Mod :P-1 :Order
    LocalMake "Row 1+Int (:P-1)/:Order
    SetXY :Side*(:Col-:Offset) :Side*(:Row-:Offset)
    Tile :Col :Row :Side]
End

To Tile :Col :Row :Side
  # use global value of :TileNo
  SetH Pick [0 90 180 270]
  Make "Parity Pick [1 -1]
  # Make "Parity 1    # comment in for no reflections
  Run Se Word "Tile :TileNo :Side PenUp
  If Number? :TileNo [Wait 4]
End

To Tile1 :Side
  Repeat 2
    [Back :Side Arch 90 0.7*:Side Forward :Side Left 180]
End

To Tile2 :Side
  Left 45 Repeat 2
    [Back :Side/1.414 Arch 90 :Side/2 Forward :Side/1.414 Left 180]
End

To Tile3 :Side
  Back :Side/2 Left 45 PenDown Forward 1.414*:Side/2
  PenUp Back 1.414*:Side/2 Right 135 Back :Side/2
  Left 26.57 Forward 0.375*:Side PenDown Forward 0.745*:Side
  PenUp Back 1.12*:Side Left 36.87 Forward 0.375*:Side
  PenDown Forward 0.745*:Side
End

To Tile4 :Side
  Repeat 2 [Back :Side/2 Arch 180 :Side/4
    Back :Side/2 Arch 68 0.9*:Side
    Forward :Side Left 180]
End

To Tile5 :Side
  Back :Side/2 Left 45 PenDown Forward 1.414*:Side/2
  PenUp Back 1.414*:Side/2
  Right 135 Forward :Side/2 Left 90 Forward :Side/2
  Left 109 PenDown Forward 0.78*:Side PenUp Back 0.78*:Side
  Right 109 Forward :Side/2 Left 90 Forward :Side/2
  Left 71 PenDown Forward 0.78*:Side
End

To Tile6 :Side
  Back :Side/2 Right :Parity*90 Back :Side/2
  Repeat 2 [
    Left :Parity*26.6 PenDown Forward 1.12*:Side
    PenUp Back 1.12*:Side
    Right :Parity*26.6 Forward :Side Left :Parity*90
    Left :Parity*26.6 PenDown Forward 0.445*:Side
    PenUp Forward 0.455*:Side
    PenDown Forward 0.22*:Side PenUp Back 1.12*:Side
    Right :Parity*26.6 Forward :Side Left :Parity*90]
End

To Tile7 :Side
  Back :Side/2 Right :Parity*90 Back :Side/2
  Repeat 2 [
    Left :Parity*26.6 PenDown Forward 1.12*:Side PenUp Back 1.12*:Side
    Right :Parity*26.6 Forward :Side/2 Left :Parity*63.4
    PenDown Forward 0.37*:Side PenUp Back 0.37*:Side
    Right :Parity*63.4 Forward :Side/2 Left :Parity*90
    Forward :Side Left :Parity*90]
End

To Tile8 :Side
  Back :Side/2
  Right 26.6 PenDown Forward 0.37*:Side PenUp Back 0.37*:Side
  Right 63.4 Back :Side/2
  Left 26.6 PenDown Forward 1.12*:Side PenUp Back 1.12*:Side
  Left 36.8 PenDown Forward 1.12*:Side PenUp Back 1.12*:Side
  Left 26.6 Forward :Side/2 Right 63.4 PenDown Forward 0.37*:Side
End

To Tile9 :Side
  Repeat 4 [
    Back :Side/2 PenDown Forward :Side/4
    Left :Parity*116.565 Forward 0.56*:Side
    PenUp Back 0.56*:Side Left :Parity*63.435
    Back :Side/4 Left 90]
End

To Tile10 :Side
  Back :Side/2 Right :Parity*90 Back :Side/2
  Repeat 2 [
    Left :Parity*26.6 PenDown Forward 0.895*:Side
    Right :Parity*90 Forward 0.445*:Side PenUp
    Left :Parity*153.4 Forward :Side Left :Parity*90]
End

To Tile11 :Side
  Back :Side/2
  Repeat 2 [
    Left :Parity*26.6 PenDown Forward 0.67*:Side
    Left :Parity*90 Forward 0.22*:Side PenUp
    Right :Parity*116.6 Forward :Side/2 Right :Parity*90
    Forward :Side/2 Right :Parity*90]
End

To Tile12 :Side
  Back :Side/2 Right 90 Back :Side/2
  Left 63.45 PenDown Forward 1.12*:Side
  Right 126.9 Forward 1.12*:Side PenUp
  Left 153.4 Forward :Side Left 90
  Left 63.45 PenDown Forward 0.56*:Side PenUp Forward 0.56*:Side
  Right 126.9 Forward 0.56*:Side PenDown Forward 0.56*:Side
End

To Tile13 :Side
  Arch 180 :Side/2
  Left :Parity*45 Back 0.7*:Side
  Arch 90 :Side/2
End

To Tile14 :Side
  Left 45 Repeat 3 [
    Back :Side/1.414 Arch 90 :Side/2 Forward :Side/1.414 Left 90]
End

To Tile15 :Side
  Back :Side/2 Right 90 Back :Side/2
  Left 26.6 PenDown Forward 0.895*:Side
  Right 90 Forward 0.445*:Side PenUp
  Left 153.4 Forward :Side Left 90
  Left 63.4 PenDown Forward 0.445*:Side
  Right 90 Forward 0.895*:Side
End

To Tile16 :Side
  Back :Side/2
  Left 26.6 PenDown Forward 0.67*:Side
  Left 90 Forward 0.22*:Side PenUp
  Right 26.6 Back :Side
  Right 26.6 PenDown Forward 0.67*:Side
  Right 90 Forward 0.22*:Side
End

To Tile17 :Side
  Back :Side/2 Right :Parity*90 Back :Side/2
  Repeat 4 [
    PenUp Forward :Side/2 PenDown Left :Parity*45
    Forward 0.71*:Side/2 Right :Parity*90
    Forward 0.71*:Side/2 Left :Parity*135]
  Left :Parity*45 Forward 1.1*:Side
End

To Tile18 :Side
  Back :Side/2 Right 90 Back :Side/2
  Repeat 2 [
    Forward :Side/3 Left 71.6 PenDown Forward 0.53*:Side
    PenUp Back 0.53*:Side Right 71.6 Forward :Side/3
    Left 71.6 PenDown Forward 0.26*:Side PenUp Back 0.26*:Side
    Right 71.6 Forward :Side/3 Left 90
    Forward :Side/3 Left 108.4 PenDown Forward 0.26*:Side
    PenUp Back 0.26*:Side Right 108.4 Forward :Side/3 Left 108.4
    PenDown Forward 0.53*:Side PenUp Back 0.53*:Side
    Right 108.4 Forward :Side/3 Left 90 ]
End

To Tile19 :Side
  Forward 0.42*:Side/2 PenDown Back 0.84*:Side/2 PenUp Back 0.58*:Side/2
  Right 90 Back :Side/2
  PenDown Left 30 Forward 1.155*:Side/2 Right 60 Forward 1.155*:Side/2
  PenUp Left 120 Forward :Side Left 120
  PenDown Forward 1.155*:Side/2 Right 60 Forward 1.155*:Side/2
End

To Tile20 :Side
  Back :Side/2 Arch 180 :Side/2 Forward :Side/2
  Left :Parity*45 Back 0.71*:Side Arch 90 :Side Forward 0.71*:Side
  Right :Parity*90 Back 0.71*:Side Left :Parity*30 Arch 30 :Side
End

To Tile21 :Side
  Back :Side/2 Arch 180 :Side/2 Forward :Side/2
  Left 90 Back :Side/2 Right 45
  Arch 90 :Side/2 Left 45 Forward :Side
  Right 135 Arch 90 :Side/2
End

To Tile22 :Side
  Back :Side/2 Left :Parity*45 PenDown
  Forward 1.42*:Side/2 Right :Parity*135
  Forward :Side Left :Parity*135
  Forward 1.42*:Side/2
End

To Arch :Angle :Radius
  # symmetrical arc drawn relative to turtle heading
  Arc :Radius Heading-:Angle/2 Heading+:Angle/2
End

To TileFill :Side
  # fill with random color
  SetH 0 Forward 0.2*:Side/2
  If 64=Item 2 (FindColor Pos) [     # only fill dark green areas
    SetPC Pick [10 12 [64 0 127]] Fill Wait 4]
End

To TileGrout :Side
  # add random grout lines
  If 0=Random 2 [
    Back :Side/2 Right 90 Back :Side/2
    PenDown Repeat 4 [Forward :Side Left 90] ]
End

To GoX
  Forever [Go (1+Random 22) (4+Random 5) Wait 240]
End

To Go :Tile :Order
  New SetSC [0 64 0]
  Make "Side Int 380/:Order     # screen width 380
  GlobalMake "TileNo :Tile SetPC Yellow
  If :Order<6 [SetPW Abs (7-:Order)]     # fat pen for low orders
  GridSq :Order :Side Wait 30
  SetPos [195 195] SetPC Black Fill Wait 30     # fill screen edge
  GlobalMake "TileNo "Fill     # fill tile
  GridSq :Order :Side Wait 30     # comment out for no fills
  GlobalMake "TileNo "Grout SetPW 1 SetPC Gray    # grout tile
  GridSq :Order :Side     # comment out for no grout
End

For a specific pattern, type go tilepattern arraysize eg go 2 7 to run.

Tiles 11-21 are filled from the centre
Tiles 31-36 have a line in their centre, so are filled off centre
Tiles 6, 7, 9, 10, 11, 13, 15, 18 and 20 have mirror image forms and use the global value of Parity of 1 or -1.

Tiles
Tile Array

 

Tile 1

Tile 2

Tile 3

Tile 4

Tile 5

Tile 6

Tile 7

Tile 8

Tile 9

Tile 10

Tile 11

Tile 12

Tile 13

Tile 14

Tile 15

Tile 16

Tile 17

Tile 18

Tile 19

Tile 20

Tile 21

Tile 22

 

Also see
Tile Patterns

Procedures blue
Variables pink
Comments green
Library gray