Generating a catenary of desired height between 2 points iteratively

I looked around and couldn’t find a 3 point catenary definition, so here is one that i created:
catenary (14.3 KB)

All you have to do is have the Anemone plugin installed.
Let me know if any of you find a faster way to do it. Cheers!

I’ll assume you posted this for feedback so here is mine.


  • You don’t need a plugin to round to decimal place.

  • Hidden wires in a simple model only make it harder to understand.

  • The Python component isn’t necessary.

  • Most serious of all, it appears that your model depends on the midpoint being directly inline between the end points? Perhaps even directly above the Average of the two end points? If that is the case, the model would be better constructed so that a bad model is impossible. You could move the Average point vertically to “construct” the midpoint, for example: (20.4 KB)

Otherwise, it’s too easy to break. When I moved that midpoint slightly, the code went into an infinite loop that required halting Rhino. That’s bad! (20.1 KB)

The white group is the conventional way of using the Catenary component where length is a parameter and height is a result. But I recall from my college summers working on a line crew that I was able to calculate how much additional wire (~6") had to be added to a very long span to lower it a given vertical distance. I can’t be bothered to figure that out now but I’m sure there is a way to get length from desired height.

In fact, your model appears to assume that the end points have the same Z coordinate? If not, the model hangs (bad!). That isn’t necessarily the case in the real world (power poles at different elevations on either side of a valley, for example). The white group doesn’t require the end points to have the same Z, though the midpoint is no longer the highest point on the curve, so that needs to be changed…

Here is a model that allows one endpoint to be raised or lowered 100 units above or below the other end and locates the highest point on the catenary curve. (11.5 KB)


Hello @Joseph_Oster ,

Firstly thank you for your detailed, enthusiastic and quick reply, and sorry for my late response.

I have now changed my problem statement from:
Obtaining a catenary through 3 points

Obtaining a catenary with desired height between 2 points
So now, one needs to only set the desired height for the catenary, and then the catenary gets solved iteratively. Correct me if I’m wrong, but from what I’ve read, there was no straight algebraic formula to get the desired height for catenaries, only iterative solutions.

(Update: Apparently there is one, I am trying to figure it out, but don’t know if it’ll be worth the time unless I require a more efficient or a faster solution in the future. This one only takes a few seconds to solve. If someone wants to figure it out, you can have a look here.)

Here is the modified script using your highest point technique: (16.1 KB)

A few post notes after your comments:

  • I used the decimal place component so that I could modify the tolerance on the fly, and wouldn’t have to go inside each component for modifications.

  • I removed the hidden wires (except one!)

  • Fixed the part that was breaking the most crucial aspect of the script. Except when the desired height is lower than either points!

  • I didn’t need the python component. By that, do you mean I could’ve just used other smaller components to get the desired result?

Thank you