C1.2 Catenaries

"As hangs the flexible line, so but inverted will stand the rigid arch." - Robert Hooke, 1675

To move towards more complex, interesting geometries, we start with the simple catenary. A catenary is a curve which, under a given external load - typically self-weight, takes on the shape of an idealized cable. Since by design the algorithms we developed output geometries in which there are only axial forces working, they are particularly suited for generating catenaries.

# ==============================================================================
# create a network
# ==============================================================================

network = Network()

network.update_dna(is_anchor=False)
network.update_dna(rx=0, ry=0, rz=0)
network.update_dna(px=0, py=0, pz=0)
network.update_dea(q=-5.0)

# linear sequence
div = 20
sp = network.add_node(x=0, y=0, z=0, is_anchor=True)
ep = network.add_node(x=100, y=0, z=0, is_anchor=True)
for i in range(div):
    p = (network.add_node(x=(i + 1) * 100 / div, y=0, z=0, pz=-3)
        if (i != div - 1) else ep)
    network.add_edge(sp, p)
    sp = p

Note that the default edge force densities are set to a negative value. With length values always positive, this means the edge forces are negative (by convention: compressive). Changing the force densities will give different catenary shapes for the same input loads.

Try yourself

  • Try fitting the apex of the catenary through a height of 10 (meters) by changing either the force densities or the weight. Does the change in parameters make intuitive sense?

  • Try creating a pointed arch under equilibrium by changing the input loads. What significance does a kink in a catenary curve have - physically and statically?

  • which shapes can you create by applying loads on intermediate nodes? What is the effect of an upwards load on any of the nodes?

Last updated