#import "@local/handout:0.1.0": *
#import "@preview/cetz:0.4.2"

= Wallpaper Symmetries

#definition()
A _Euclidean isometry_ is a transformation of the plane that preserves distances. \
Intuitively, an isometry moves objects on the plane without deforming them.

There are four classes of Euclidean isometries:
- translations
- reflections
- rotations
- glide reflections
#note(
  [We can prove there are no others, but this is beyond the scope of this handout.],
) \
A simple example of each isometry is shown below:

#let demo(c) = {
  let s = 0.5
  cetz.draw.line(
    (0, 0),
    (3 * s, 0),
    (3 * s, 1 * s),
    (1 * s, 1 * s),
    (1 * s, 2 * s),
    (0, 2 * s),
    close: true,
    fill: c,
    stroke: black + 0mm * s,
  )
}

#table(
  stroke: none,
  align: center,
  columns: (1fr, 1fr),
  rows: (3.5cm, 3.5cm),
  row-gutter: 2mm,
  [
    #cetz.canvas({
      import cetz.draw: *

      demo(ored)
      translate(x: -1.0, y: -1.0)
      demo(oblue)
    })
    #v(1fr)
    Translation
  ],
  [
    #cetz.canvas({
      import cetz.draw: *

      circle((-2, 0), radius: 0.1, stroke: none, fill: black)
      arc(
        (-2, 0),
        radius: 1,
        anchor: "origin",
        start: 0deg,
        stop: -30deg,
        mode: "PIE",
      )

      demo(ored)
      rotate(z: -30deg, origin: (-2, 0))
      demo(oblue)
    })
    #v(1fr)
    Rotation
  ],

  [
    #cetz.canvas({
      import cetz.draw: *

      line((-2, 0), (4, 0))

      translate(x: 0, y: 0.25)
      demo(ored)
      set-transform(none)

      set-transform((
        (1, 0, 0, 0),
        (0, 1, 0, 0),
        (0, 0, 1, 0),
        (0, 0, 0, 1),
      ))

      translate(x: 0, y: 0.25)
      demo(oblue)
    })
    #v(1fr)
    Reflection
  ],
  [
    #cetz.canvas({
      import cetz.draw: *


      demo(ored)

      set-transform((
        (1, 0, 0, 0),
        (0, 1, 0, 0),
        (0, 0, 0, 0),
        (0, 0, 0, 0),
      ))
      translate(x: 2, y: 0)

      demo(oblue)

      set-transform(none)
      line((-1, 0), (5, 0))
    })
    #v(1fr)
    Glide reflection
  ],
)

#definition()
A _wallpaper_ is a two-dimensional pattern that...
- has translational symmetry in at least two non-parallel directions (and therefore fills the plane) \
  #note[
    "Translational symmetry" means that we can slide the entire wallpaper in some direction, \
    eventually mapping the pattern to itself.]
- has a countable number of reflection, rotation, or glide symmetries. \

#v(1fr)
#pagebreak()

#problem()
Is a plain square grid a valid wallpaper?

#solution([
  Yes!
  - It has translational symmetry in the horizontal and vertical directions
  - It has a countable number of symmetries---namely, six distinct mirror lines (horizontal, vertical, and diagonal) duplicated once per square.
  - A square grid is #sym.convolve`442`
])

#v(1fr)


#problem()
Is the empty plane a valid wallpaper?

#solution([
  No, since it has uncountably many symmetries.
])

#v(1fr)
