#import "@local/handout:0.1.0": * #import "@preview/cetz:0.3.1" = Wallpaper Symmetries #definition() A _Euclidean isometry_ is a transformation of the plane that preserves distances. \ Intuituvely, an isometry moves objects on the plane without deforming them. There are four classes of _Euclidean isometries_: - Translation - Reflection - Rotation - Glide reflection #note([We can prove that 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: 0, y: -1.5) 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: 1.5, 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 directions #note([(and therefore fills the plane)]) - has a countable number of reflection, rotation, or glide symmetries. \ #problem() Is the empty plane a valid wallpaper? #solution([ No, since it has uncountably many symmetries. ])