applications.collages.collageAlgebra("Penrose kites & darts 3"):
{
  tileBgr = const(1),
  tileBgg = const(.95),
  tileBgb = const(.8),
  tileColour1r = const(.2),
  tileColour1g = const(.8),
  tileColour1b = const(.6),
  tileColour2r = const(.6),
  tileColour2g = const(.2),
  tileColour2b = const(.2),
  alpha = const(36),
  r = const(2/(1 + sqrt(5))),
  rPie = const(1/2 * #r),
  
  kite-outline = { polygon((0, -cos(2 * #alpha)), (sin(2 * #alpha), 0), (0, cos(#alpha) / #r), (-sin(2 * #alpha), 0))},
  kite-background = { filledPolygon((0, -cos(2 * #alpha)), (sin(2 * #alpha), 0), (0, cos(#alpha) / #r), (-sin(2 * #alpha), 0))[#tileBgr,#tileBgg,#tileBgb]},
  kite = { 
      filledPolygon((0, -cos(2 * #alpha)), (sin(2 * #alpha), 0), (0, cos(#alpha) / #r), (-sin(2 * #alpha), 0))[#tileBgr,#tileBgg,#tileBgb],
      filledPie(0, -cos(2 * #alpha),#rPie,#alpha / 2,4*#alpha)[#tileColour1r,#tileColour1g,#tileColour1b],
      filledPie(0, cos(#alpha) / #r, #rPie,-3/2 * #alpha, -2 * #alpha)[#tileColour1r,#tileColour1g,#tileColour1b],
      filledPie(-sin(2 * #alpha), 0, #rPie, -#alpha / 2, 2 * #alpha)[#tileColour2r,#tileColour2g,#tileColour2b],
      filledPie(sin(2 * #alpha), 0, #rPie, 7/2 * #alpha, 2 * #alpha)[#tileColour2r,#tileColour2g,#tileColour2b]
    } + #kite-outline,
    
  dart-outline = {polygon((0, 0), (sin(#alpha) / #r, cos(#alpha) / #r), (0, cos(#alpha) / #r - cos(2 * #alpha)), (-sin(#alpha) / #r, cos(#alpha) / #r))},
  dart-background = { filledPolygon((0, 0), (sin(#alpha) / #r, cos(#alpha) / #r), (0, cos(#alpha) / #r - cos(2 * #alpha)), (-sin(#alpha) / #r, cos(#alpha) / #r))[#tileBgr,#tileBgg,#tileBgb]},
  dart = {
      filledPolygon((0, 0), (sin(#alpha) / #r, cos(#alpha) / #r), (0, cos(#alpha) / #r - cos(2 * #alpha)), (-sin(#alpha) / #r, cos(#alpha) / #r))[#tileBgr,#tileBgg,#tileBgb],
      filledPie(-sin(#alpha) / #r, cos(#alpha) / #r, #rPie, -#alpha / 2, -#alpha)[#tileColour1r,#tileColour1g,#tileColour1b],
      filledPie(sin(#alpha) / #r, cos(#alpha) / #r, #rPie, 180 + #alpha / 2, #alpha)[#tileColour1r,#tileColour1g,#tileColour1b],
      filledPie(0, 0, #rPie, 3/2 * #alpha, 2 * #alpha)[#tileColour2r,#tileColour2g,#tileColour2b],
      filledPie(0, cos(#alpha) / #r - cos(2 * #alpha), #rPie, #alpha / 2, -6 * #alpha)[#tileColour2r,#tileColour2g,#tileColour2b]}
    + #dart-outline,
  
  rk1 = scale(#r) . rotate(180 + #alpha) . translate(0, cos(#alpha) / #r),
  rk2 = translate(sin(2 * #alpha), 0) . scale(#r) . rotate(3 * #alpha) . translate(0, -cos(2 * #alpha)),
  rk3 = translate(-sin(2 * #alpha), 0) . scale(#r) . rotate(-3 * #alpha) . translate(0, -cos(2 * #alpha)),
  refine-kite = <rk1, rk2, rk3>,
  
  invert = translate(0, cos(2 * #alpha)) . rotate(-3 * #alpha) . scale(1/#r) . translate(-sin(2 * #alpha), 0),
  invert = <invert>,
  
  rd1 = translate(0, -cos(#alpha) / #r) . rotate(180) . scale(#r),
  rd2 = scale(#r) . rotate(180 - #alpha) . translate(sin(#alpha) / #r, cos(#alpha) / #r),
  refine-dart = <rd1, rd2>
  
  
}
