summaryrefslogtreecommitdiff
path: root/trees/blog/figures/frieze-old.typ
blob: 6ccc79e138b39f1dc03c2bb25a03d6f282b3a6be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#import "@preview/cetz:0.4.2"
#import cetz.draw: *

#show text: it => smallcaps(it)
#set page(width: auto, height: auto)

#let domain = {
  let tolerance = 0.05
  set-style(stroke: color.blue)
  line((tolerance, tolerance), (1.0 - tolerance, 1.0 - tolerance), stroke: 2pt)
  set-style(stroke: color.red)
  line((0.5, 0.8), (1.0 - tolerance, 1.0 - tolerance))
  set-style(stroke: color.black)
  line((0.8, 0.5), (1.0 - tolerance, 1.0 - tolerance))
}

#let frieze(n, start, mode, draw-grid: false, x-step: 1) = {
  cetz.canvas({
    set-style(stroke: color.blue)
    translate(start)
    if draw-grid {
      grid(
        (0, 0),
        (n, 1),
        stroke: red.transparentize(80%),
      )
    }

    let i = 0
    let angles = (0deg, 180deg)
    let transform = if mode == "hop" {
      ang => ()
    } else if mode == "sidle" {
      ang => (rotate(y: ang, origin: (0.5, 0.5)))
    } else if mode == "step" {
      ang => (rotate(x: ang, origin: (0.5, 0.5)))
    } else if mode == "spinning sidle" {
      ang => (rotate(y: ang, origin: (0.5, 0.5)))
    } else if mode == "spinning hop" {
      ang => (rotate(z: ang, origin: (0.5, 0.5)))
      // ang => {
      //   if ang == 180deg {
      //     translate(x: -1)
      //     rotate(z: ang, origin: (0.5, 0.0))
      //   } else {
      //     // translate(x: -0.5)
      //     rotate(z: ang, origin: (0.5, 0.0))
      //   }
      // }
    }

    while i < n {
      let ang = calc.rem(i, angles.len())

      transform(angles.at(ang))
      domain
      transform(angles.at(-ang))

      translate(x: x-step)

      i += 1
    }
  })
}


hop
#frieze(8, (0, 0), "hop")
spinning hop
// #frieze(16, (0, 4), "spinning hop", x-step: 0.5)
#frieze(8, (0, 4), "spinning hop")
step
#frieze(8, (0, 10), "step")
sidle
#frieze(8, (0, 2), "sidle")
spinning sidle
#frieze(8, (0, 2), "spinning sidle")