|
4 | 4 | | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | |
5 | 5 | | <img src="../.gitbook/assets/RV_horizontal-eq (1).svg" alt="" data-size="original"> | <p><strong>Rhino command name</strong></p><p><code>RV_tna_horizontal</code></p> | <p><strong>source file</strong></p><p><a href="../../plugin/RV_tna_horizontal.py"><code>RV_tna_horizontal.py</code></a></p> | |
6 | 6 |
|
7 | | -This function geometrically reconfigures the the edges of the ForceDiagram, such that the corresponding edges of the FormDiagram and Forcediagram become parallel (in the conventional graphic statics sense), or perpendicular (the 90° rotated, RhinoVAULT convention). The resulting ForceDiagram and FormDiagram are reciprocal where the two diagrams are topological duals of the other and all pairs of corresponding edges are parallel (within tolerance). |
8 | | - |
9 | | -*** |
10 | | - |
11 | | -## Reciprocal Diagrams |
12 | | - |
13 | | -In order for the Form and Force Diagram to describe the distribution of horizontal thrust in a three-dimensional network of compression forces in equilibrium with vertical loads applied to its nodes, they need to be not only dual, but also reciprocal.  |
14 | | - |
15 | | -Two diagrams are reciprocal if they are dual, and if their corresponding edges are at a constant angle with each other. Typically, corresponding edges are required to be parallel, or perpendicular, but any other constant angle is sufficient as well. |
16 | | - |
17 | | -In RhinoVAULT, the Form and Force Diagram are considered reciprocal if corresponding edges are perpendicular. |
| 7 | +`RV_tna_horizontal` geometrically reconfigures the the edges of the `ForceDiagram`, such that the corresponding edges of the `FormDiagram` and `ForceDiagram` become parallel to each another (in the conventional graphic statics sense), or perpendicular (the 90° rotated, RhinoVAULT convention). The resulting `ForceDiagram` and `FormDiagram` are _reciprocal_ when the two diagrams are topological duals of the other and all pairs of corresponding edges are parallel (within tolerance). |
18 | 8 |
|
19 | 9 | <figure><img src="../.gitbook/assets/forcediagram-reciprocal.jpg" alt=""><figcaption><p>After horizontal equilibrium has been found, the form and force diagrams are now reciprocal.</p></figcaption></figure> |
20 | 10 |
|
21 | 11 | *** |
22 | 12 |
|
23 | 13 | ## Horizontal Forces |
24 | 14 |
|
25 | | -Once the Form and Force Diagram are reciprocal they describe the horizontal equilibrium of the corresponding three-dimensional force network. The edges of the Form Diagram define the directions and points of application of the forces, whereas the edges of the Force Diagram define the distribution of force magnitudes along those directions. |
26 | | - |
27 | | -The magnitudes of horizontal forces are equal to the lengths of the edges in the Force Diagram, multiplied with a scaling factor.  |
| 15 | +Once the `FormDiagram` and `ForceDiagram` are reciprocal, they describe the horizontal equilibrium of the corresponding three-dimensional force network. The edges of the `FormDiagram` define the directions and points of application of the forces, whereas the edges of the `ForceDiagram` define the distribution of force magnitudes along those directions. The magnitudes of horizontal forces are equal to the lengths of the edges in the `ForceDiagram`, multiplied with a scaling factor.  |
28 | 16 |
|
29 | 17 | *** |
30 | 18 |
|
31 | 19 | ## Algorithm Parameters |
32 | 20 |
|
33 | 21 | ### Alpha |
34 | 22 |
|
35 | | -In RhinoVAULT, horizontal equilibrium is computed by parallelising 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. |
36 | | - |
37 | | -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. |
38 | | - |
39 | | -If `alpha = 0`, the target vectors are completely defined by the edges of the force diagram. Therefore only the Form Diagram will be updated. |
| 23 | +In RhinoVAULT, horizontal equilibrium is computed by parallelising 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 RhinoVAULT is `alpha`, which is the weighting factor for the calculation of the target vectors. |
40 | 24 |
|
41 | | -For all other values, the target vectors are calculated using the following formula: |
| 25 | +If `alpha = 100`, the target vectors are completely defined by the vectors of the edges of the `FormDiagram`. This means that only the geometry of the `ForceDiagram` 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 `ForceDiagram`. Therefore only the `FormDiagram` will be updated. For all other values, the target vectors are calculated using the following formula: |
42 | 26 |
|
43 | 27 | $$ |
44 | 28 | t_i = \alpha \cdot \hat{e}_{i, form} + (1 - \alpha) \cdot \hat{e}_{i, force} |
45 | 29 | $$ |
46 | 30 |
|
47 | | -Note that using `alpha` efficiently requires a bit of practice and experience. Since the Form Diagram defines the intended layout of horizontal forces and RV2 has many tools for designing force layouts that provide a good starting point for form finding explorations, it is usually a good idea to start with `alpha = 100`. However, once you have the horizontal equilibrium under control, playing around with lower `alpha` values can have a significant influence on finding nicely balanced force distributions. |
| 31 | +Note that using different values of `alpha` requires a bit of practice and experience. Since the `FormDiagram` defines the intended layout of horizontal forces and RhinoVAULT has many functionalities for designing force layouts that provide a good starting point for form finding explorations, it is usually a good idea to start with `alpha = 100`. However, once you have the horizontal equilibrium under control, playing around with lower `alpha` values can have a significant influence on finding nicely balanced force distributions. |
48 | 32 |
|
49 | 33 | ### Iterations |
50 | 34 |
|
51 | | -Computing horizontal equilibrium is an iterative process. The default number of iterations is `100`. For sensible force layouts, this value should go a long way. However, there are many cases in which more iterations are required. 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. |
| 35 | +Computing horizontal equilibrium is an iterative process. The default number of `iterations` is 100. For sensible force layouts, a horizontal equilibrium can be found in less `iterations`. However, there are many cases in which more `iterations` are required. For example, if the `FormDiagram` has multiple open/unsupported edges, and especially if those edges have a high `sag` value, more `iterations` will typically be required to reduce all angle deviations between corresponding edges to less than the default tolerance of 5 degrees. |
52 | 36 |
|
53 | | -Computing horizontal equilibrium is quite fast. Therefore, don't hesitate to set the number of iterations to `1000` or more if the need arises. However, don't go completely overboard either (`10000` iterations is quite excessive in most cases), because the calculation has no stoppage criterion, since it tends to be more computationally expensive to check for convergence than to just run all the requested iterations. |
| 37 | +Computing horizontal equilibrium is quite fast. Therefore, don't hesitate to set the number of `iterations` to 1000 or more if the need arises. However, don't go completely overboard either (10000 `iterations` is quite excessive in most cases), because the calculation has no stoppage criterion, since it tends to be more computationally expensive to check for convergence than to just run all the requested `iterations`. |
54 | 38 |
|
55 | 39 | Furthermore, resolving all angle deviations is not an absolute requirement, and is in many cases unnecessary. For example, the angle deviations between very short edges tend to be quite persistent as they are dominated by edges with (much) longer lengths during the calculation process. Since short edges in the Force Diagram also represent (relatively) small horizontal forces, these deviations can often be ignored. |
56 | 40 |
|
| 41 | +{% hint style="warning" %} |
| 42 | +`RV_tna_horizontal` does not have a termination criteria. It will always run the number of `iterations` that has been defined. |
| 43 | +{% endhint %} |
| 44 | + |
57 | 45 | ### Refreshrate |
58 | 46 |
|
59 | | -The iterations of the horizontal equilibrium calculation process is dynamically visualised. The rate at which the diagrams are updated is controlled by the refreshrate. The default value is `10`, which means that the diagrams are updated every 10 iterations. |
| 47 | +The `iterations` of the horizontal equilibrium calculation process is dynamically visualized. The rate at which the `iterations` are visualized is controlled by the `refreshrate`. The default value is 5, which means that the diagrams are updated every 5 iterations. |
| 48 | + |
| 49 | +For large diagrams the dynamic visualization slows down the calculations a little bit. In situations where a high numbers of `iterations` (> 1000) is required, it is advisable to set the `refreshrate` to a higher value. For example, if the number of `iterations` is 1000, then a refresh rate of 50 seems more appropriate. |
60 | 50 |
|
61 | | -For large diagrams the dynamic visualisation slows down the calculations a little bit. In these cases, and/or for high numbers of iterations (`> 1000`), it is therefore advisable to set the refreshrate to a higher value. For example, if the number of iterations is `1000`, then a refresh rate of `100` seems more appropriate. |
| 51 | +<figure><img src="../.gitbook/assets/RV_horizontal_sequence.gif" alt=""><figcaption><p>Animation of iterations in<code>RV_tna_horizontal</code> for a simple pattern.</p></figcaption></figure> |
0 commit comments