Eliminate manual bit packing errors with compile-time validation and code generation — full C++ implementation included.
The tool below solves 2D static equilibrium problems. Given a set of points with known coordinates and either known or unknown force components, it solves the three equilibrium equations (\(\sum F_x = 0\), \(\sum F_y = 0\), \(\sum M_z = 0\)) symbolically and returns each unknown force. It was originally built for FSAE rules quiz usage.
Similar to Everything Aero and the Gas Cycle Calculator, this tool uses SymPy in the browser to solve the resulting system of equations symbolically.
key=value pairs describing one force application point. E.g. "x=0, y=0, fx=10, fy=0"x, y, fx, fy, f, anglefx=... and/or fy=....f=..., angle=... (angle measured CCW from the positive x-axis).mm, cm, dm, m, km, in, ft, yd, mile; forces N, kN, lbf; angles rad, deg. E.g. x=210*mm, f=2*kN, angle=30*deg.The solver builds the full equilibrium system (translational and rotational) and hands it to SymPy. It solves for all unknown force components and coordinates symbolically and returns the values.
The calculator runs a full Python environment in the browser. It needs a few seconds to start up and install packages with pip (in the browser environment only). SymPy is lazily loaded on the first Solve press, so that first solve takes a few seconds.
If the tool fails to load, reload the page and check the console (press F12).
Let's take a look at how to use the calculator on an FS rules quiz question.
FS-Quiz Question 157 describes a beam loaded with several vertical forces and supported at two points. We need to find the reaction forces at the supports.
Every loaded point and every support gets one input line. Loaded points have their applied force as fy; supports have fx=0 (the rollers/pins only carry vertical load) and leave fy unknown so the solver fills it in.
x=0, y=0, fx=0, fy=-40
x=.21, y=0, fx=0, fy=-60
x=.36, y=0, fx=0, fy=-35
x=.535, y=0, fx=0, fy=-55
x=.11, y=0, fx=0
x=.48, y=0, fx=0
Fig. 1 shows the input and the resulting reaction forces at the two supports. The correct solution (\(91.1\) N) is shown as \(F_5\) as we have entered the point that is ask for at position 5.
Note that we can use arithmetic expressions in the input values (e.g. x=(210+150)*mm).
The web UI is built with ngapp and runs Python entirely in the browser. Each input line declares one point with coordinates and (optionally) a force. The unit suffixes (mm, kN, deg, …) are implemented as additional equations/knowns. SymPy assembles and solves the resulting system symbolically and the result is rendered as LaTeX with MathJax.
For a planar rigid body in static equilibrium, the net force and the net moment around any point both vanish. With \(N\) force application points at positions \((x_i, y_i)\) and force components \((F_{x,i}, F_{y,i})\), the solver writes:
Writing the moment balance around every point is redundant in 2D (one moment equation plus the two force equations is enough), but it lets the solver use whichever set is easiest given the knowns and helps SymPy converge without the user having to pick a pivot.
When a force is given as a magnitude \(F\) and an angle \(\alpha\) measured CCW from the positive x-axis, the solver adds:
$$F_{x,i} = F \cos\alpha \qquad F_{y,i} = F \sin\alpha$$so the rest of the system stays in Cartesian components.
This project (with exceptions) is published under the CC Attribution-ShareAlike 4.0 International License.