Minimal surface between enclosed curve, network curves, or surface

Hi all,

I am looking for a form finding technique to find the form of a tensile fabric structure when given any of the following:

  1. a single boundary curve
  2. multiple boundary curves
  3. an existing surface

My method for form finding right now, using kangaroo, is that I generate a U-V mesh by panelling tools using lunchbox. I then proceed to add anchor points to mesh points that touch the edge curve. Then I vary the goals from soapfilm, mesh length factor, lines-spring, and constant tension. Seeing whichever form I like best.
Is there any way to tell which one is the most accurate and a real minimal surface?
Also, my fixed anchors are moving after the simulation. Any reason as to how or why it is happening?

form finding (17.8 KB)

Hi @Jack_R

The Live Soap goal is the one which will give an actual minimal surface, since the shape does not depend on the initial meshing, and the forces are based on the triangle areas, not just the edges.

The EdgeLengths component is simply a convenient way of creating Length(spring) goals, so these two are the same.

While these edge based goals will not give you a minimal surface, that doesn’t necessarily mean the resulting surface cannot be used for a tensile structure. In fact, many built tensile membrane structures are not in the shape of minimal surfaces. It is important that all parts of the fabric are in tension, but having different magnitudes of tension depending on direction is not itself a problem, and it does allow more freedom in choosing the shape. Strictly minimal surfaces (equal tension in all directions, zero mean curvature, as approximated by soap films) are of interest in mathematics though.
Bear in mind when finding tensile shapes with springs that the ratio of U to V divisions will affect the shape, and using a boundary aligned vs diagonal grid will give different results.

I don’t think it makes much sense to use constant tension goals in this way. They can be useful for designing cable net structures though.

There is no need for any timer component. Kangaroo2 does the iteration automatically.

The regular ‘Solver’ component is the one I’d recommend using most of the time rather than the bouncy one, since it converges quicker, and gives you structured data output.

You can set the Anchor strength to 1e300 to make sure they do not move at all.

There should be no need to change the strength of the tension goals here, since the resulting geometry is the same if you are finding the form with no other forces acting. You can just leave them at their default values.

1 Like

Hello Daniel,

Thank you for your detailed response. Just wanted to say I love using Kangaroo, an amazing tool.

Just had a few other questions I wanted to ask you:

  1. How exactly are the length and strength parameters linked to the material properties or elasticity?
  2. Is it actually possible to emulate deformations (close to FEA) based on accurate boundary conditions?
  3. Is there any documentation on exactly how these forces and and goals work in Kangaroo? Because all I could find was videos and examples. Finding what you require using Ctrl+F would be quite beneficial I feel and speed up the process
  4. What goals should I use for compression form finding?

Thanks a lot for your guidance, it is extremely helpful

Hi Jack,

For length goals, they act as a spring following Hooke’s law - the Length input is the rest length, and the Strength input is k - the spring constant. To use known material properties you can calculate k using EA/L, where E is Young’s modulus, A is area, and L is the rest length.

Some other answers I’ve posted on the units and methods that might be helpful:

You can find some example definitions here, including catenary form-finding for compression structures:

I hope this is helpful

Hi daniel, that did help a lot.

I also wanted to ask you what the difference between 1)mesh edges, and 2) line edge lengths derived using mesh edges.

I am modelling both as a cablenet, but I am not getting the same results from the latter. According to my understanding, they were the same. I am doing this so that I can control the tension in each cable

I appreciate your help


Yes - the EdgeLengths component sends exactly the same type of goals to the solver as if you extract the mesh edges yourself and connect them to a Length goal component.
However, with the EdgeLengths component you set the rest lengths as a factor of starting length, while with the Length component you either leave the ‘length’ input blank and it defaults to 1 * the starting length, or you input an absolute value for the rest length. Also the default strength for the Length component is 10, while for EdgeLengths it is 1.

Thanks for the quick reply. I tried setting the edge length (for the length component, which is what I plan on using) to zero to get the same result, but it doesn’t seem to work.

I am attaching a definition below. Do you know the exact way I can mimic the behavior of the EdgeLengths component? I am even using the exact same mesh to obtain the lines, but the results are different, and my anchors seem to float away

cablenet_variable (19.8 KB)

The results are different because you are giving them different lines as input.
For one you project the mesh onto a plane, while for the other you leave it as this cone shape in 3d.
Also you are projecting your anchors onto a plane, meaning they won’t act on the upper boundary of your cone, unless that is also projected onto the plane.
Are you trying to relax a mesh in the plane or in 3d?

I am trying to do it in 3D.

The results are different because you are giving them different lines as input.

This is really embarrassing, sorry to waste your time on something so trivial.
Anyway, here is my input vs output:



I changed the form finding method slightly, when compared to your definition(from K2E) for a cablenet form finding and subsequent analysis. This was because you had obtained the quad mesh beforehand. Using my method, I could generate the input mesh myself, and tweak the input characteristics including mesh edges and anchors.

Thank you again for your help. I will post here once I get the variable pre-stress right.