"Unsolvable" geometric problem

Chris, I don’t see a simple way to create the geometry as surfaces.
Try the Dendro example, the result is quite different from yours.

Alas. Back to the drawing board, then.

It comes to my mind that Bongo has the ability to create such geometry. I’ll check.

maybe the attached approach is of some help, still then need to choose the right split points in the generated surface
divide-interpolate-loft.gh (12.0 KB)

I think I have a drawn solution for a helical twist (not the OP’s twist which varies along the length, but the idea may be extendable to it).

If one considers the disk at the top of the starting cylinder position and assume it has a centreline in the direction of the long axis of the solid then all points on the surface to the left of that axis will, when starting to move on their helical path, have an upward component to their movement vector. All points to the right of the axis will have a downward component. Any point on the centreline has a horizontal vector.

Taking the left half: because all points are moving upward in sync, the path of any point on the trailing edge will always pass above the points in front of it in its path. Similarly, for the right half, path of a point on the leading edge will pass above the paths of points following it. We can therefore create the left half of the surface by doing a rail revolve of the trailing edge of the circle and the right half by doing a rail revolve of the leading edge. These surfaces can be trimmed where they intersect and the higher parts joined. The surface is completed by inserting the disk representing the top of the cylinder at starting and ending positions to plug the gaps between the two revolves.

The sides are made by creating a line through the points where a helical path is tangential to the surface of the initial cylinder and rail revolving it to the final cylinder. The ends are simply the cylinder walls trimmed by the tangential line.

CP_CylinderChallenge (1) 001.3dm (541.6 KB)


And here is the same method applied to the OP’s twist:

So the solution can be drawn, @Charles.


Jeremy, that looks very good!
Could you provide the file you made for the original twist?
I’d like to compare with the iterative ‘solution’.

Thank you.

Hi Charles,

Here’s the file - look at the OP layers. A couple of things to note - I get strange visual artefacts on the sides in a rendered view and the reverse side (which is a polar array copy of the front side) doesn’t join even though the front side does. I don’t really have time to sort these gremlins, but they don’t impact on the solution method.

CP_CylinderChallenge (1) 002.3dm (1004.9 KB)


Impressive, and nearly perfect.
Nearly means, when I underlay the iterative result, there are differences.

Hi Charles,

You are right: it is a consequence of the variable pitch in the twist. The rail revolve assumes the rotation is perpendicular to the axis whereas we need a rotation perpendicular to the rail for this to work.

This is made obvious by constructing a series of correctly oriented circles along the rail and comparing their edge position with the a twisted line originating on the edge of the initial circle. They ought to be tangential, but are not:

My method works for the special case of a helical curve because it has a constant angle of twist but, unfortunately, not where there is a variable pitch. More cabernet sauvignon fuelled brainstorming needed.


Hi @Charles

Here’s another attempt:

Same idea, creating surfaces from the leading and trailing edges of the initial cylinder cap, but this time using curve networks of accurately placed semicircles and tangential edges.

Here’s the model - let me know how it matches the iterative method. It was a fairly sparse network so the result may be a bit low-fidelity.

CP_CylinderChallenge (1) 004.3dm (1007.5 KB)


1 Like

Looks quite good.
Your idea how to model this is very smart.
Thanks for you effort!

Can you say where the accordion meshing on the sides comes from?

Taking a slightly different approach, I found the intersection of the circular cap as it passes through an arbitrary plane. These intersections are a series of lines, which trace out a butterfly shape. The top portion of this can then be swept to get the surface you’re looking for. See attached grasshopper script and images.
180914 Sweep Cylinder.gh (21.5 KB)


That’s a clever approach. But wouldn’t the butterfly have a different profile according to the degree of twist, which varies along the length of the axis? For example, at each end of the surface where the twist hasn’t started the cap is flat. Like my early attempts, I suspect your solution only works in the special case of a helix.

Wish I had your fluency with Grasshopper though.


Yep, I’ve assumed constant rotational speed (which you can set in the gh script). The butterfly shape changes when you change this rotational speed.
You’re also right that at the start and end the surface should be subtly different, but only for a distance equal to the radius of the cylinder. It would be possible to modify the script to create different profiles near the start and end to compensate for this, but it would be a fair bit of work.