View the interactive version here: https://culter.github.io/TriangleParameters/
This WebGL2 shader iterates the following piecewise-linear map over the triangle a>0, b>0, a+b<1:

This map models the action of the self-reflecting billiard on a triangle, where a(π/2) is the (internal) opposite angle, which is acute, and (b+1)(π/2) is the (internal) incident angle, which is obtuse.
The recommended "first-return" color mode adds pigment for each run of shears, where the darkness of the pigment depends on the number of shears, and the hue depends on the number of area-doublings we're done so far.
