applications.collages.collageAlgebra("Penrose kites & darts 2"):
{
  ntColour = const(.8),
  alpha = const(36),
  r = const(2/(1 + sqrt(5))),
  
  kite = { 
      curve(
            (-#r * sin(2 * #alpha), -(1 - #r) * cos(2 * #alpha)) right (#r * cos(2 * #alpha), #r * sin(2 * #alpha)),
            (#r * sin(2 * #alpha), -(1 - #r) * cos(2 * #alpha)) left (-#r * cos(2 * #alpha), #r * sin(2 * #alpha))
      )[1,0,0] width .1,
      curve(
            (sin(2 * #alpha) - sin(#alpha) * #r, cos(#alpha) * #r) right (#r * (1 - #r) * -cos(#alpha) / #r, #r * (1 - #r) * -sin(2 * #alpha)),
            (-sin(2 * #alpha) + sin(#alpha) * #r, cos(#alpha) * #r) left  (#r * (1 - #r) * cos(#alpha) / #r, #r * (1 - #r) * -sin(2 * #alpha))
      )[0,1,0] width .1,
      polygon((0, -cos(2 * #alpha)), (sin(2 * #alpha), 0), (0, cos(#alpha) / #r), (-sin(2 * #alpha), 0))
    },
    
  dart = {
      curve(
            (sin(#alpha) * #r, cos(#alpha) * #r) right ((1-#r) * (1-#r) * -cos(#alpha) / #r, (1-#r) * (1-#r) * sin(#alpha) / #r),
            (-sin(#alpha) * #r, cos(#alpha) * #r) left ((1-#r) * (1-#r) * cos(#alpha) / #r, (1-#r) * (1-#r) * sin(#alpha) / #r)
      )[0,1,0] width .1,
      curve(
            (sin(#alpha) * #r, cos(#alpha) / #r - cos(2 * #alpha) * #r) right (sqrt(1/2) * cos(2 * #alpha), sqrt(1/2) * -sin(#alpha) / #r),
            (-sin(#alpha) * #r, cos(#alpha) / #r - cos(2 * #alpha) * #r) left (sqrt(1/2) * -cos(2 * #alpha), sqrt(1/2) * -sin(#alpha) / #r)
      )[1,0,0] width .1,
      polygon((0, 0), (sin(#alpha) / #r, cos(#alpha) / #r), (0, cos(#alpha) / #r - cos(2 * #alpha)), (-sin(#alpha) / #r, cos(#alpha) / #r))
    },
  
  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>
  
  
}
