Triangle vs Square vs Hexagon — Which Frame Is Strongest? compared three bracing patterns under a shared material budget: a fully triangulated frame, a plain square grid, and a honeycomb. The only technically substantive comment on it argued that the problem needs no FEA — that free body diagrams and a moment/matrix method would work it out.
It is a confident, reasonable-sounding claim. This script does it exactly that way, and it fails for all three frames, in two completely different ways.
python -m pip install -r requirements.txt
python reproduce.py # ~2 seconds
python reproduce.py --no-plot # numbers only
For a pin-jointed plane truss with m members, r reaction components and
j joints:
m + r − 2j |
meaning |
|---|---|
| > 0 | indeterminate — equilibrium alone is that many equations short. Closing it needs compatibility and member stiffness, which is a matrix/stiffness method. |
| = 0 | determinate — solvable by joint equilibrium alone, and the member forces do not depend on E or A at all. |
| < 0 | a mechanism — pin the joints and it folds under any load. |
| joints | members | m + r − 2j |
verdict | |
|---|---|---|---|---|
| TRIANGLE | 20 | 43 | +6 | stands, but statics is 6 equations short |
| SQUARE | 20 | 31 | −6 | folds, 6 different ways |
| HEXAGON | 28 | 35 | −18 | folds, 18 different ways |
| WARREN (reference) | 7 | 11 | 0 | solve it by hand |
Run the proposed method and the shape of the system says the same thing:
triangle 40 equations, 46 unknowns, rank 40 -> 6 equations short
square 40 equations, 34 unknowns, rank 34 -> no solution exists
hexagon 56 equations, 38 unknowns, rank 38 -> no solution exists
warren 14 equations, 14 unknowns, rank 14 -> SOLVED
Two of the three are not structures at all on paper. A free-body-diagram treatment assumes pin joints. Pin the square and the honeycomb and they are mechanisms — they fold under any load whatsoever. They stand in that video only because their joints transmit moment. The hand method applied as stated does not give a slightly wrong answer; it predicts immediate collapse. That is also the physical reason those two came last.
Even the triangulated one cannot be solved by statics. It is the one that looks like a textbook truss and it is genuinely stable — but it has 6 redundant members. 40 equations, 46 unknowns.
In a determinate truss the member forces follow from equilibrium alone, so
they cannot depend on E or A. Stiffen any member and nothing moves. That
independence is exactly what makes hand calculation possible.
triangle 34 of 43 members change the force pattern (worst 5.86%)
warren 0 of 11 members change the force pattern (worst 2.1e-13%)
The sweep stiffens every member in turn, not one chosen by heuristic. That matters: probing only the member carrying the largest force on the triangle picks the one directly under the load, whose force is fixed by joint equilibrium alone. It reports zero movement — which looks exactly like a determinate structure and is the opposite of the truth. An indeterminate frame contains locally determinate members.
A Warren truss: m + r − 2j = 0, 14 equations and 14 unknowns, solved here by
equilibrium alone with no material properties anywhere. The rule was fine. The
structures weren't.
Three independent computations of the same integer, which must agree exactly:
| check | how |
|---|---|
| count vs null-space dimension | integer arithmetic vs an eigenvalue decomposition |
| count vs equilibrium-matrix rank | a third route, and the method the comment proposed |
| rigid-body modes | an unsupported plane frame must have exactly 3 |
| hand vs stiffness on the reference | two solvers sharing no code, one using no material properties |
| determinate forces ignore stiffness | swept over every member |
| mechanisms raise | never a least-squares fit dressed up as an answer |
The rigid-body check exists because that mistake was actually made while building this: a first pass reported "40 free DOF of 40" and three spurious zero modes on a frame that is not a mechanism. The supports had not been applied at all, and the rigid-body count is what exposed it.
The zero-eigenvalue tolerance is relative and the spectral gap is reported alongside, because a bare tolerance on a stiffness eigenvalue is not physical on its own — the evidence is the separation between the zero cluster and the first real mode.
- Pin-jointed, axial-only. That is the point — it is the assumption the proposed method makes — but it means these numbers are not the video's capacities, which come from a rigid-jointed frame analysis.
r = 3(pin + roller).ris a convention, not a property of the frame: two pins giver = 4and shift every count by one. The verdicts here happen to survive that change, but the convention is stated rather than assumed.- Linear elastic, small displacement. The fold amplitude in the plot is a drawing choice — a mechanism has no equilibrium amplitude, which is precisely why it is one.
reproduce.py everything, one file, no classes
requirements.txt
results/ written on run: results.json, statics.png