Isothermic Costa Surface

Thanks, Daniel! Lots to think about here. I’ve tried bending the boundary but I’ll give it another try before posting my file. I’ll also try co-circular forces as a comparison.

I’m reading Stefan’s thesis; thanks for sharing that reference. I’m trying to understand what you mean exactly by “rearranging the edges”. I understand the concept, but am trying to think through the modeling process with K2 …


  • I think this is what I’ve been attempting to do (albeit, unknowingly). I’ll tinker a bit more and post my attempts for good measure.
  • helpful advice!

I had another look at this paper by Bobenko, Hoffmann and Springborn, and managed to implement the discrete Christoffel dual operation in Kangaroo, along with an edge tangent to sphere goal for making Koebe polyhedra.

This uses a few new components from the next release, but I’ll post the files here as soon as its ready


Super! Really looking forward to the next release.

I too, read the Bobenko, Hoffmann and Springborn paper as it was referenced in Architectural Geometry (Pottmann,, which was helpful in explaining the parallel diagonals.

Just a sketch experimenting with reversing the orientation of the quads as shown on p.701.

The above just flips domain of the horizontal edge lengths and sets that as the target (shortest becomes longest, etc), and includes a very low bending force along the horizontal polylines, with gradually increasing but proportional forces between the Line and Cyclic Quad goals. Not really accurate since it never converges, but sort-of neat nonetheless.
1 Like

Almost - but it’s not the lengths of the edges that need to swap, it’s the direction of the diagonals (the lengths all change). (26.5 KB)
(note that this operation won’t work if you have internal vertices with valence ≠ 4. Then you need to break it up into patches and re-assemble)


Very nice, thanks!

and here’s the def including a new goal for making mesh edges tangent to a sphere, as needed to generate Koebe polyhedra: (21.6 KB)


nice stuff here

“outer boundary” is relative :wink: the Costa Surface can be modeled from a single NURBS surface.
Technically this it is a surface with 3 holes, closed in u- and v-direction (a torus with three holes).
However, you have to turn it inside out so that the holes appear as outer boundaries:

Many years ago I made a vbscript animation morphing such a torus to a costa srf… I’ll search for it.


Nice. Like this right?


yes, but as NURBS surface. Much nicer :wink:
Edit: and mine is from 2006

Depends what you want to do with it I guess!
For fabrication, flat panels which can be offset with beams of constant depth that node out cleanly can be useful.
NURBS will be smoother, but also still only an approximation of the true minimal surface right?

This quote sums up what I find appealing about the discrete differential geometry approach:

“The basic philosophy of discrete differential geometry is that a discrete object like a polyhedron is not merely an approximation of a smooth one, but rather a differential geometric object in its own right. In contrast to traditional numerical analysis which focuses on eliminating approximation error in the limit of refinement (e.g., by taking smaller and smaller finite differences), DDG places an emphasis on the so-called “mimetic” viewpoint, where key properties of a system are preserved exactly, independent of how large or small the elements of a mesh might be”


Beautiful! Learning alot here.

Jess, I’d love to see your animated NURBS version. Are you suggesting in your screenshot that it’s possible to invert the flat surface into the Costa using control points?

Daniel, your samples are super helpful - much appreciated as always. Is it within the scope of them to invert the torus?

Yes. From the flat surface you can make a torus and this can be “morphed” into a Costa Surface.
Have a look at the attached file: CostaTorusSmoothing_jm.3dm (262.9 KB)

and the animation:



Super! Is it possible to find the named selection set in Rhino 6?

Select these points manually and run the _InvertPt command

Got it!
It’s interesting how the torus needs to be made from the flat surface for this to work. I just tried to model a simple torus and cut a few ellipses out of it to mimic yours, and it smooths out into a circle.

For the purposes of what I’m working on I do need a planar quad mesh, but I can’t help but be curious about that first step - going from a flat planar surface to the torus.

I could watch this all day!

1 Like

Hey Daniel, this was no critic of your work! We know that Grasshopper and Kangaroo and many other tools for Rhino have changed the world. I use and love all techniques dealing with geometry. When I solved that problem I had no idea if there is a way to model a Costa surface from a single NURBS. So I started with really low point count surfs and used the smooth command a lot. You might have a look at the 3dm file I posted above. And yes, this is probably just a very rough approximation of a minimal surface. Who cares - I love beautiful shapes, dirty math and fabricating crazy designs. :wink:

I should say, I’ve been able to arrive at a planar quad mesh using older-school methods (mostly because I’m still trying to absorb the Koebe and Christoffel methods above), but the result is wonky at best.

Hi Nick,

I’m not sure if I understand. In the file I’ve posted you can for example draw curves into the rectangle on Layer “Costa UV curves” and use the _ApplyCrv to map these curves onto the costa surface.
Or you could create a surface and use _FlowAlongSrf to map any geometry onto it.

Ah ok, I have not seen your last post. Please find attached two Costa Topologies made from Quads.
The regular and the goofy version. Jess
CostaQuads_jm.3dm (540.4 KB)