5. Horizontal Equilibrium

Horizontal equilibrium is computed by parallelizing the edges of the Form and Force Diagram to corresponding target vectors. These target vectors are defined as the weighted average of the vectors of corresponding edge pairs. Therefore, the most important parameter for the calculation of horizontal equilibrium in RV2 is alpha, which is the weighting factor for the calculation of the target vectors.

If alpha = 100, the target vectors are completely defined by the vectors of the edges of the Form Diagram. This means that only the geometry of the Force Diagram will be updated to achieve horizontal equilibrium. This is the default.

If alpha = 0, the target vectors are completely defined by the edges of the force diagram. Therefore only the Form Diagram will be updated.

In this tutorial, we set alpha = 100, iterations kmax = 300. Also, no edge label is shown anymore, which means that all the corresponding edges are perpendicular to each other within the tolerance. proxy and numpy computes horizontal equilibrium quite fast. For sensible force layouts, the iteration value can set higher. For example, if the Form Diagram has multiple open/unsupported edges, and especially if those edges have a low "sag" value, more iterations will typically be required to reduce all angle deviations between corresponding edges to less than 5 degrees.

# ==============================================================================
#  Horizontal Equilibrium
# ==============================================================================
alpha = 100
kmax = 300

proxy = Proxy()
proxy.package = 'compas_tna.equilibrium'
formdata, forcedata = proxy.horizontal_numpy_proxy(form.to_data(), force.to_data(), kmax=kmax, alpha=alpha)
form = FormDiagram.from_data(formdata)
force = ForceDiagram.from_data(forcedata)

Only once the angle deviations disappear, meaning the edges are perpendicular, the dual diagram is reciprocal and call actually be called the ForceDiagram.

Last updated