Skip to content

tiling

12 motifs. Import them from geomotif.motifs, or build one by name with registry.create("tiling.ammann-beenker").

tiling.ammann-beenker

tiling.ammann-beenker

The octagonal quasicrystal: squares and 45-degree rhombs, never repeating.

from geomotif import save_svg
from geomotif.motifs import AmmannBeenker

motif = AmmannBeenker(radius=110.0)
save_svg(motif.build(), "tiling.ammann-beenker.svg", width=320, height=320)
geomotif render tiling.ammann-beenker --out tiling.ammann-beenker.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.ammann-beenker",
  "params": {
    "size": 16.0,
    "radius": 110.0,
    "offsets": [
      0.5,
      0.5,
      0.5,
      0.5
    ],
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default
size float 16.0
radius float 150.0
offsets tuple[float, ...] (0.5, 0.5, 0.5, 0.5)
center Point (0.0, 0.0)

tiling.cairo

tiling.cairo

The Cairo tiling: pentagons in fours, spinning like a pinwheel.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.cairo", **registry.describe("tiling.cairo").example)
save_svg(motif.build(), "tiling.cairo.svg", width=320, height=320)
geomotif render tiling.cairo --out tiling.cairo.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.cairo",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 34.0
  }
}
Parameters
Name Type Default
size float 34.0
region Bounds required
clip bool True

tiling.herringbone

tiling.herringbone

Rectangles laid in chevrons, each one's end against the next one's side.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.herringbone", **registry.describe("tiling.herringbone").example)
save_svg(motif.build(), "tiling.herringbone.svg", width=320, height=320)
geomotif render tiling.herringbone --out tiling.herringbone.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.herringbone",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "length": 60.0,
    "width": 30.0
  }
}
Parameters
Name Type Default
length float 60.0
width float 30.0
region Bounds required
clip bool True

tiling.hexagonal

tiling.hexagonal

The honeycomb: regular hexagons, three to a corner.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.hexagonal", **registry.describe("tiling.hexagonal").example)
save_svg(motif.build(), "tiling.hexagonal.svg", width=320, height=320)
geomotif render tiling.hexagonal --out tiling.hexagonal.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.hexagonal",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 40.0
  }
}
Parameters
Name Type Default
size float 40.0
region Bounds required
clip bool True

tiling.penrose-p2

tiling.penrose-p2

Penrose's kite and dart, the tiling that cannot repeat.

from geomotif import save_svg
from geomotif.motifs import PenroseP2

motif = PenroseP2(depth=4)
save_svg(motif.build(), "tiling.penrose-p2.svg", width=320, height=320)
geomotif render tiling.penrose-p2 --out tiling.penrose-p2.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.penrose-p2",
  "params": {
    "depth": 4,
    "radius": 160.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default
depth int 5
radius float 160.0
center Point (0.0, 0.0)

tiling.penrose-p3

tiling.penrose-p3

Penrose's rhombs: one thin, one thick, and no repeating pattern ever.

from geomotif import save_svg
from geomotif.motifs import PenroseP3

motif = PenroseP3(depth=4)
save_svg(motif.build(), "tiling.penrose-p3.svg", width=320, height=320)
geomotif render tiling.penrose-p3 --out tiling.penrose-p3.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.penrose-p3",
  "params": {
    "depth": 4,
    "radius": 160.0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default
depth int 5
radius float 160.0
center Point (0.0, 0.0)

tiling.rhombille

tiling.rhombille

Tumbling blocks: each hexagon split into three rhombi.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.rhombille", **registry.describe("tiling.rhombille").example)
save_svg(motif.build(), "tiling.rhombille.svg", width=320, height=320)
geomotif render tiling.rhombille --out tiling.rhombille.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.rhombille",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 40.0
  }
}
Parameters
Name Type Default
size float 40.0
region Bounds required
clip bool True

tiling.snub-square

tiling.snub-square

Squares and triangles, two of each at every corner -- the 3.3.4.3.4.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.snub-square", **registry.describe("tiling.snub-square").example)
save_svg(motif.build(), "tiling.snub-square.svg", width=320, height=320)
geomotif render tiling.snub-square --out tiling.snub-square.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.snub-square",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 34.0
  }
}
Parameters
Name Type Default
size float 34.0
region Bounds required
clip bool True

tiling.square

tiling.square

Squares edge to edge: the graph paper of tilings.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.square", **registry.describe("tiling.square").example)
save_svg(motif.build(), "tiling.square.svg", width=320, height=320)
geomotif render tiling.square --out tiling.square.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.square",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 40.0
  }
}
Parameters
Name Type Default
size float 40.0
region Bounds required
clip bool True

tiling.triangular

tiling.triangular

Equilateral triangles, alternately point up and point down.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.triangular", **registry.describe("tiling.triangular").example)
save_svg(motif.build(), "tiling.triangular.svg", width=320, height=320)
geomotif render tiling.triangular --out tiling.triangular.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.triangular",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 40.0
  }
}
Parameters
Name Type Default
size float 40.0
region Bounds required
clip bool True

tiling.truchet

tiling.truchet

Quarter-circles in square cells, each turned at random.

from geomotif import save_svg
from geomotif.motifs import TruchetTiling

motif = TruchetTiling(cols=6, rows=6)
save_svg(motif.build(), "tiling.truchet.svg", width=320, height=320)
geomotif render tiling.truchet --out tiling.truchet.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.truchet",
  "params": {
    "size": 30.0,
    "cols": 6,
    "rows": 6,
    "seed": 0,
    "center": [
      0.0,
      0.0
    ]
  }
}
Parameters
Name Type Default
size float 30.0
cols int 10
rows int 10
seed int 0
center Point (0.0, 0.0)

tiling.truncated-square

tiling.truncated-square

Octagons with small squares in the gaps -- the 4.8.8 tiling.

from geomotif import save_svg
from geomotif.core import registry

# This motif's example takes values that are themselves objects, so it
# reads better through the registry than as a constructor call.
motif = registry.create("tiling.truncated-square", **registry.describe("tiling.truncated-square").example)
save_svg(motif.build(), "tiling.truncated-square.svg", width=320, height=320)
geomotif render tiling.truncated-square --out tiling.truncated-square.svg
{
  "geomotif": "1.3.1",
  "motif": "tiling.truncated-square",
  "params": {
    "region": {
      "$type": "geomotif.core.types.Bounds",
      "min_x": -150.0,
      "min_y": -150.0,
      "max_x": 150.0,
      "max_y": 150.0
    },
    "clip": true,
    "size": 34.0
  }
}
Parameters
Name Type Default
size float 34.0
region Bounds required
clip bool True