I have recently been exploring some reciprocal force diagrams using Kangaroo.

From the 1869 paper by James Clerk Maxwell On reciprocal figures, frames and diagrams of forces :

…to construct the Polygon of Forces, by drawing in succession lines parallel and proportional to the different forces, each line beginning at the extremity of the last. If the forces acting at the point are in equilibrium, the polygon formed in this way will be a closed one.

Applications of such reciprocal force diagrams include the method of graphic statics, and also thrust network analysis (see Block and Ochsendorf 2007) for the form-finding of masonry vaults, in which the planar reciprocal network corresponds to the horizontal equilibrium of the nodes.

Kangaroo can generate structures in static equilibrium in a simple and intuitive way using dynamic relaxation. Once we have this equilibrium structure we can rearrange the force vectors to form such a reciprocal diagram. When the structure is modelled as a mesh I found there is a nice easy way to do this rearrangement also with Kangaroo: Scale the edges of the mesh so that their length corresponds to the force along that edge, then for each face, take the start points of  its edges and just pull them together with attraction forces, but keeping the edge lengths and orientations fixed (ie allowing only pure translation). If the forces are balanced (which they will be if the simulation has stopped moving) then everything matches up as neatly closed polygons in the resulting reciprocal diagram. We can also optionally rotate the edges by 90° before pulling them together, which reduces the distance they have to move.

reciprocal force diagram with Kangaroo


reciprocal force diagram process


Grasshopper definition can be downloaded here

(Note that unlike the thrust network analysis approach which actually uses the reciprocal diagram as part of the process of generating the equilibrium structure, here I am just showing a way to generate such a reciprocal diagram from a structure after we have found its equilibrium. So in this case it is used not as an essential step, but as an alternative visual representation which I think can be quite revealing about the behaviour of the structure.)

In the special case where our structure has been form-found by treating the edges of a mesh as zero-rest-length springs of uniform stiffness, this generation of the reciprocal figure becomes even simpler still. Recall that the force in a spring is proportional to its extension relative to its rest length. If the rest length is zero, then the length is the extension, so the edge lengths already correspond to their forces and there is no need for any scaling step (another way of looking at this is that zero rest length springs of the same stiffness correspond to constant force-density elements).

This lead me to thinking about the equivalent for tensile structures. If we relax the edges of a mesh with a non planar boundary, we can get a tensile network in space. Here because the only forces in the system are in the edges themselves (unlike the compression shell example, where there is also a vertical load vector on each point), we can actually form the reciprocal force diagram in 3d space without having to project to the plane. The reciprocal diagram is then another stable 3d tension structure of zero-rest-length springs.

(if you focus on a single edge, you will see that they do not rotate or change length, but only translate)

The word reciprocal is also used in a quite different context to refer to frame structures of mutually supporting elements, also sometimes called nexorades (which I explored a bit here).reciprocal_joints

As I was finding these reciprocal force diagrams, I noticed that as the lines were moving from the triangulated tension structure to its reciprocal (in the force diagram sense), the intermediate stages actually bore some resemblance to such reciprocal structures (in the nexorade sense). As shown the video above, by adding another force to keep the lines pulled onto each other while moving between the 2 forms, this can be emphasized even more, and means that the intermediate networks also form surfaces.


This suggested to me a connection to Bonnet rotations and associate, or adjoint families of minimal surfaces – see 1, 2, 3 for some more info on these (this also ties back in with my old interest in complex analysis).

The work of Pinkall and Polthier uses nonconforming triangulations for performing these Bonnet rotations, as well as describing the now widely used cotan weighting scheme for calculating discrete minimal surfaces. Kangaroo does now contain an option for such cotan weighted mesh smoothing, but this was not actually used in generating the mesh in the video above, because of how using uniformly weighted zero length springs simplifies the transition to the reciprocal diagram described earlier. However, because I have performed a remeshing so that the mesh triangles are all similar, the difference between these is greatly reduced.

Open question – what sort of linkages might allow a physical realization of these Bonnet rotations as an actual transformable structure?

Coming back to compression structures for a moment – in the last few years there has been something of a resurgence of interest in this area, and some great work not just from architecture and engineering departments, but also from the geometry processing/graphics side, and I think it is very exciting to see these disciplines coming together more.

Some recent papers that I have particularly enjoyed:

On the Equilibrium of Simplicial Masonry Structures by De Goes, Alliez, Owhadi, Desbrun

Computing Self-Supporting Surfaces by Regular Triangulation by Liu, Pan, Snyder, Wang, Guo

The use of a particle method for the modelling of isotropic membrane stress for the form finding of shell structures by Aish, Joyce, Malek, Williams

Form-finding with Polyhedral Meshes Made Simple by Tang, Sun, Gomes, Wallner, Pottmann

Design of Self-supporting Surfaces by Vouga, Hobinger, Wallner, Pottmann

Interactive Vault Design by Rippmann, Lachauer and Block

Designing Unreinforced Masonry Models by Panozzo, Block, Sorkine-Hornung

Weighted Triangulations for Geometry Processing by De Goes, Memari, Mullen, Desbrun

I should also mention that all of my examples above also make use of the remeshing tools I have been working on recently, for preparing the meshes before relaxation. Since the last time I wrote about dynamic remeshing here, I have made significant improvements to these tools (making use of the Plankton half-edge mesh library developed by Will Pearson and myself), and am finding many applications for them. Having meshes with well formed triangles of near equal edge lengths comes in very handy for all sorts of physical simulation and optimization (some more videos of this here: 1,2). I’m also now exploring more ways of actually carrying out the remeshing at the same time as the form-finding, and some of the papers above suggest to me some very interesting further possibilities in this direction.

Here is one example of using the dynamic remeshing coupled with surface smoothing for a very interactive approach to tensile form-finding:

Well, that turned into a longer post than I expected – lots of exciting stuff going on!

That’s about all from me for now, but I’d welcome any comments and discussion.


For some more on graphic statics see the Active Statics site by Simon Greenwold (who also wrote the particle-spring library used by the Cadenary tool, which was one of the early inspirations for Kangaroo), and also the eQuilibrium site from ETHZ.

For a lot more on things like thrust network analysis, force-density, dynamic relaxation and shells in general, the new book Shell Structures for Architecture: Form Finding and Optimization is now out. I had the pleasure of being one of the reviewers, and am very happy to see this book now in print – such a reference on these topics is very welcome, and I hope it will  lead to even more interesting development and application of shells in architecture.



Minimal surface puzzle

The top row shows three different minimal surfaces from the same boundary curves.
The bottom row shows the same 3 surfaces rotated and in a different order.
Which number corresponds to which letter?

I’ve always aimed to make Kangaroo a specifically architectural physics engine. While it shares many characteristics with similar engines used for other purposes, such as games and animation, it has some features that are uniquely suited to designing buildings.

Form-finding and physics-based-modelling often result in curved shapes, with an elegant and natural appearance which is something I greatly enjoy about these methods.

However, the fact remains that most existing architectural geometry consists of straight lines and right-angles.

So the latest addition I have made to Kangaroo is for interaction between boxes, which remain aligned with the global XYZ directions. As shown in the video above, this can be combined with other forces such as gravity and attraction, causing the boxes to cluster together, and they will always remain orthogonal.

Because of the constraint to the component directions, this actually removes the need for calculating any square roots for distances, which is usually a significant part of the physics computation, so it is simple and fast.

I’ve also added an option to allow the boxes to alter their proportions in order to maintain a fixed volume. So as they get pushed on by neighbouring boxes or other forces they may get squashed or elongated, but they keep their contained volume the same (Movement could also be constrained in the vertical direction, so areas are fixed).

Some people have already used Kangaroo for arranging rooms (for example see Marc Syp’s project Realtime Physics for Space Planning), using systems of weighted springs and colliding spheres to balance complex networks of  adjacency requirements between different functional areas of buildings. I’m hoping this new functionality could be useful in taking these ideas further…

All of these triangles are identical and equilateral:

In architectural geometry over the last few decades, a common topic of research has been how to build and clad doubly curved surfaces in an efficient way.

While computer aided manufacturing has made it possible to make buildings where every panel has slightly different dimensions, there are still often significant benefits in fabrication and assembly if identical panels can be used.

However, it is a geometric impossibility to smoothly cover a doubly curved surface with many perfectly identical panels, all meeting exactly edge-to-edge. The typical way of dealing with this is to have many variations in the shapes of the panels. Non-uniformity in the connectivity of the mesh (ie. some irregular vertices) can help reduce the magnitude of these variations (see my previous post for more on this), but still leaves many different panel shapes.

An approach I’ve been exploring a bit recently is to allow some gaps to open up between panels in a controlled way, but still keeping vertices connected. By each panel rotating slightly in a particular alternating clockwise/counter-clockwise pattern they are able to expand and contract to allow for the curvature of the surface. To keep a high ratio of panel to gap area, this expansion must be limited, and well positioned irregular vertices (the 4 pointed stars in the image above) can help with this.

This can be done with various tiling types – squares, triangles, and hexagon/triangle combinations. However, to allow this alternating twist pattern, it must be one which can be coloured in a checkerboard fashion, which also means every internal vertex must be surrounded by an even number of faces.

Of course, if we want to make such a structure into a closed skin, then something needs to fill in the gaps, which do all vary in shape, but if these are made from a material which is easier to cut, I think there could still be a significant overall benefit. For example, mass-produced identical triangular or square glass panels, with varying aluminium ‘stars’ or ‘diamonds’ for the gaps.

Designing such panelizations is a good application of a computational physics design tool like Kangaroo. Indeed I was inspired by the sculptures of Ron Resch, who produced some similar forms as an emergent result of physical processes of folding paper.

Ron Resch in his studio. Photo from Joan Michaels Paque via Eric Gjerde

(Eric also pointed out to me this wonderful video of some more of Resch’s work)

See also the ‘Tile Magic’ series here for some other possible tilings that could be used

A more recent inspiration is Haresh Lalvani who has produced some related forms, by cutting thin slits in sheet steel, allowing it to twist and expand in a similar way when deformed.

Sculpture by Haresh Lalvani

It is not always easy to predict what surfaces it is possible to panel in such a way, and only by setting up the physical constraints and manipulating the surface do we see how it can deform and get a feel for its possibilities.

At a small scale we can actually do this with the real material, but at a larger scale, if we wanted to pre-calculate the shape and the dimensions of the varying gap pieces beforehand then the digital-physical form-finding is vital.

Amazingly Ron Resch actually even wrote some computer programs back in the 60s to do some fairly similar iterative form-finding and even produce 3d animations. (See in the video linked to earlier from about 28:00 to 38:00)

Such examples of what was possible even with relatively primitive technology are an inspiration to push things further today…

Next Page »