More selected projects

A Study of Trapped Triangles

Three short programs that perform meaningful interactions between animated triangles and the larger physical triangles which constrain them.

produced by: Danny Keig

Concept and background research

When tasked with creating the sequence for our triangle formation I very solidly decided to commit to working only with triangles. I wanted any animations to interact meaningfully with the boundaries of the physical triangles that were the projection surface so that the physical shape of the surface could remain in focus. I was inspired largely by tessellation and the fact that by using equilateral triangles I could resize my shapes and move them freely, knowing that they will slot into corners and fill the required space nicely. As I am normally drawn to techniques involving curves and flowing lines, a geometric project provided an interesting set of limitations to work within and encouraged me to explore the joy of ‘simple’ 2D geometric structures. I was inspired by Kandinsky’s sharper pieces and Manfred Mohr’s relentless experimentation with squares. I also took inspiration from Ryoji Ikeda’s exciting flow of geometry.


I used two different equilateral triangle formulas when creating the work, one calculated from a corner, and one calculated from the centre. The first allowed me to easily calculate vectors for each of the corners of my animated triangles, allowing for interactions between those and the larger boundary triangles. The centre model allowed me to perform rotations from the centre point of a triangle, and to create arrays (vectors) of triangles which spilled out from one point. I implemented many sine functions in this piece to create movement as I felt it was very natural and created interesting transitions. 

My first scene features many tiered triangles growing from each corner. As they grow, the overlap creates further triangles while the sinusoidal colour movement gives the impression of pulsations. Each collection of triangles begins a rotation sequence from each corner and as they each fall off the surface, their edges meet their neighbours. A sine function modulating a sine function provides further unexpected twirling movements. 

The second scene features a vector being filled with triangles originating from a centre point. Their colours change in a sequence as they grow, and when further triangles are squeezed into the same space a psychedelic visualisation is achieved. At the end of this scene, I utilised Perlin Noise to create a collection of rotating triangles, offset in rotation and scaled in size, with the largest just brushing the boundaries of the physical shape. 

The final scene was the most difficult to program as it required deep interaction with the edges. I calculate the distance from a corner of a triangle to it’s corresponding boundary, and reduce that distance over time, pulling the triangle to its destination. I experimented with this speed to create either flow or a quick snapping effect. Giving these triangles random sizes every frame gave a Ryoji Ikeda type effect that creates movement even in moments of the triangle being stationary. The trailing effect was inspired by the Fiery Comet example from in-class, which nicely emphasised the edges of the boundary triangles.

Future development

For future development I would consider exploring some physics modelling within the triangle space, figuring out ways to have the triangles bounce and interact with each other. I would like to free them from the edges somewhat, but still retain the limitations of the boundaries which can create such striking mappings. I would concentrate on achieving sharper imaging and further explore creative applications of triangles focusing on tessellation. Giving the animated triangles more independence from one another would create more unpredictable results also.

Self evaluation

My biggest disappointment with the final result is the lack of definition in the projections and this can be attributed to a few main areas. I could have first coded my shapes at a larger size, using a larger FBO allocation, instead of having to blow up the animation to fit within each triangle during the mapping. I could have used a thicker line width for outlines and details which would have prevented some pixelation. The physical size of our geometric projection canvas greatly impacts the resolution of the images - for a sharper image I could have spent more time experimenting with getting the projector closer to the object so that much of the screen was being put to use. Despite these issues, the triangle formation was a great success as it was visually striking due to its free-floating appearance and its reflective white surface which made the images bright and vibrant. I was very pleased with the animations that I created and felt that I put the edges and corners to good use in my code. I was also pleased with how each triangle that was mapped on the surface, when combined, created many interesting visual effects that were much greater as a whole when compared to what one surface looked like as I was creating it.


Class Example: Fiery Comet Trails
Class Example: Noised Rotation

Calculating an equilateral triangle from one corner:

Calculating an equilateral triangle given a centre point