# [A Force and Moment Equilibrium Calculator](https://blog.hirnschall.net/force-moment-equilibrium/)

author: [Sebastian Hirnschall](https://blog.hirnschall.net/about/)

meta description: Symbolic calculator for 2D static equilibrium problems (FSAE-friendly). Enter points with coordinates and known forces, get all unknown reactions solved in the browser.

meta title: Force & Moment Equilibrium Calculator — 2D Statics Solver

date published: 14.05.2026 (DD.MM.YYYY format)
date last modified: 14.05.2026 (DD.MM.YYYY format)

---

About
-----

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](https://blog.hirnschall.net/everything-aero/) and the [Gas Cycle Calculator](https://blog.hirnschall.net/gas-cycle-calculator/), this tool uses SymPy in the browser to solve the resulting system of equations symbolically.

### How to use it

* Enter one point per line. Each line is a comma-separated list of `key=value` pairs describing one force application point. E.g. "x=0, y=0, fx=10, fy=0"
* Each point may have the following values: `x`, `y`, `fx`, `fy`, `f`, `angle`
* Force at a point can be provided in one of two equivalent ways:
  + Cartesian: `fx=...` and/or `fy=...`.
  + Magnitude + angle: `f=...`, `angle=...` (angle measured CCW from the positive x-axis).
* Forces or coordinates that are not provided become unknowns the solver will determine.
* Units can be multiplied into values. Supported: lengths `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`.
* Bare numbers are in m, N, deg.
* Click **Solve**. Results are rendered as LaTeX: per-point reaction vectors \(F\_i\), their magnitudes \(\|F\_i\|\), coordinates, and moments \(M\_{z,i}\).

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).

Calculator
----------

Loading Python

...




Examples
--------

Let's take a look at how to use the calculator on an FS rules quiz question.

### Example: FS-Quiz Question 157

[FS-Quiz Question 157](https://fs-quiz.eu/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`).

![Input and solution for FS-Quiz Question 157 (2D static equilibrium), showing the reaction forces at the two supports](https://blog.hirnschall.net/force-moment-equilibrium/resources/img/fs-quiz-157.jpg)


Figure 1: Input and solution for FS-Quiz Question 157 (2D static equilibrium), showing the reaction forces at the two supports

How It Works
------------

The web UI is built with [ngapp](https://cerbsim.github.io/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.

### Equilibrium Equations

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:

* **Force equilibrium**:
  $$\sum\_{i=1}^{N} F\_{x,i} = 0 \qquad \sum\_{i=1}^{N} F\_{y,i} = 0$$
* **Moment equilibrium** around each point \(i\):
  $$\sum\_{j \ne i} \big[(x\_j - x\_i)\, F\_{y,j} - (y\_j - y\_i)\, F\_{x,j}\big] = 0$$

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.

### Force from Magnitude and Angle

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.