applications.collages.collageAlgebra:
  {
    ntColour = const(.8),
    h = const(sqrt(3)),
  
    tile = { polygon((-3,-#h),(3,-#h),(0,2*#h)) },
    tile2 = { filledPolygon((-3,-#h),(3,-#h),(0,2*#h))[.8] } + #tile,
    
    sample-arrow = { filledPolygon((3,-#h), (1.8,-#h + .5), (1.8,-#h - .5)) },
    sample-reduction = scale(.7) . translate(0,-.3 * #h + .9 * tan(30)),
    S = #tile +
        #tile transformed by sample-reduction +
        #sample-arrow transformed by sample-reduction,
    A = #tile2 +
        #tile transformed by sample-reduction +
        #sample-arrow transformed by sample-reduction,
    
    r1 = scale(1/3) . translate(-2,-2/3 * #h),
    r2 = use(r1) . rotate(120),
    r3 = use(r1) . rotate(240),
    r4 = scale(1/3) . translate(0,-2/3 * #h),
    r5 = use(r4) . rotate(60),
    r6 = use(r4) . rotate(120),
    r7 = use(r4) . rotate(180),
    r8 = use(r4) . rotate(240),
    r9 = use(r4) . rotate(300),
    refine = < r1, r2, r3, r4, r5, r6, r7, r8, r9 >,
    
    s1 = translate(-3,#h) . scale(1/3) . rotate(60),
    s2 = translate(3,#h) . scale(1/3) . rotate(-60),
    s3 = use(r1) . translate(4,0),
    s4 = translate(0,#h) . scale(2/3),
    refine2 = < r1, s1, #tile transformed by r4, s2, s3, s4>,
    
    invert = rotate(120) . translate(2, 2/3 * #h) . scale(3),
    invert = <invert>
    
  }
