4.4  Moments

“Give me a place to stand on, and I can move the earth.”

— Archimedes, as reported by Pappus of Alexandria, c. AD 340

A moment, also known as the torque can be described as a “force to generate a rotation”, as it generates an angular acceleration if not in ballance.

A moment has the unit Newton-meter [ Nm ], it is a vector, and appears around a point as the product of a moment arm (hävarm), \(d\), and an applied force, \(F\), perpendicular to the moment arm, see the figures below.

Moment in 2D and 3D

\[ \boxed{ \boldsymbol M_O = \boldsymbol r \times \boldsymbol F } \]

where \(\boldsymbol r\) is known as the moment arm, and \(\boldsymbol F\) is the applied force. The moment arm is the vector from the point of rotation to the line of action of the force. The direction of the moment is determined by the right-hand rule, which states that if you curl your fingers in the direction of rotation, your thumb will point in the direction of the moment.

The scalar counterpart

\[ M = F d \]

Figure 4.4.1: Two forms of the right-hand rule. Left: when the fingers curl in the sense of rotation, the thumb points along the moment vector. Right: with the index finger along \(\bm a\) and the middle finger along \(\bm b\), the thumb points along \(\bm a \times \bm b\).

We can derive the moment vector from Figure 4.4.2, which lays the components of \(\bm r\) and \(\bm F\) along the axes and builds the three moment components from them.

Figure 4.4.2: The moment of \(\bm F\) about \(O\), component by component. Each moment component turns about its axis, positive by the right-hand rule, and is built from the two force components across that axis and the two arm components that reach them.

\[ \boldsymbol{M}_O=\left[\begin{array}{l} M_x \\ M_y \\ M_z \end{array}\right]=\left[\begin{array}{c} F_z r_y-F_y r_z \\ F_x r_z-F_z r_x \\ F_y r_x-F_x r_y \end{array}\right]=\left[\begin{array}{c} F_z r_y-F_y r_z \\ -\left(F_z r_x-F_x r_z\right) \\ F_y r_x-F_x r_y \end{array}\right]=\boldsymbol{r} \times \boldsymbol{F} \]

The operator \(\times\) is known as the cross product or vector product, and in 3D for a moment arm vector and force vector the physical meaning is a moment vector. The cross product is a vector that is perpendicular to the plane formed by the two vectors being multiplied. The order of operation is important, according to the right-hand rule convention, the moment arm vector is the first vector.

\[ \boldsymbol M = \boldsymbol r \times \boldsymbol F = - \boldsymbol F \times \boldsymbol r \]

\[ \boldsymbol{M} \perp \boldsymbol{r} \text { and } \boldsymbol{M} \perp \boldsymbol{F} \]

Figure 4.4.3: Trivial examples of how the cross product works, showcasing the independency on the point of application along the line of application.

In sympy we compute the cross product by

import sympy as sp
F_x, F_y, F_z, r_x, r_y, r_z = sp.symbols('F_x, F_y, F_z, r_x, r_y, r_z', real=True)

FF = sp.Matrix([F_x, F_y, F_z])
rr = sp.Matrix([r_x, r_y, r_z])

MM = rr.cross(FF)
MM

\(\displaystyle \left[\begin{matrix}- F_{y} r_{z} + F_{z} r_{y}\\F_{x} r_{z} - F_{z} r_{x}\\- F_{x} r_{y} + F_{y} r_{x}\end{matrix}\right]\)

Example 1 - 2D Trivial case

rr = sp.Matrix([3, 0, 0])
FF = 10*sp.Matrix([0,1,0])

M_z = 3*10
$$ M_z = 30 $$
MM = rr.cross(FF)
$$ \boldsymbol M = \left[\begin{matrix}0\\0\\30\end{matrix}\right] $$

Note that the \(y\) component in rr can take any value, and the moment around \(z\) will be the same, this is obvious since the \(x\) distance does not change.

Example 2 - 2D general

ee_F = sp.Matrix([4/5, 3/5, 0])
FF = 10*ee_F
rr_OA = sp.Matrix([3, -4, 0])

M_z = 5*10
Code
latex_str = f"$$ M_z = {M_z} $$"
display(HTML(latex_str))
$$ M_z = 50 $$
MM = rr_OA.cross(FF)
$$ \boldsymbol M = \left[\begin{matrix}0\\0\\50.0\end{matrix}\right] $$
t = 2
rr = rr_OA + t*ee_F
rr

\(\displaystyle \left[\begin{matrix}4.6\\-2.8\\0\end{matrix}\right]\)

MM = rr.cross(FF)
$$ \boldsymbol M = \left[\begin{matrix}0\\0\\50.0\end{matrix}\right] $$

Here we can vary the parameter \(t\) to set the point of application to any point along the line of application and the moment around the \(z\) axis will be unaffected. In fact the can set the parameter \(t\) to a symbolic value and we can see that \(t\) vanishes in the cross product.

t = sp.symbols('t', real=True)
rr = rr_OA + t*ee_F
rr

\(\displaystyle \left[\begin{matrix}0.8 t + 3\\0.6 t - 4\\0\end{matrix}\right]\)

MM = rr.cross(FF)
$$ \boldsymbol M = \left[\begin{matrix}0\\0\\8.88178419700125 \cdot 10^{-16} t + 50.0\end{matrix}\right] $$
⚠ Note

Here sympy generates numerical round off errors, 10^-16 is a very small number and can be neglected.

Another way of avoiding this floating-point arithmetic is to use the Rational class in sympy, which will keep the numbers as fractions. This is useful when you want to avoid round off errors in your calculations.

ee_F = sp.Matrix([sp.Rational(4,5), sp.Rational(3,5), 0])
FF = 10*ee_F
rr_OA = sp.Matrix([3, -4, 0])
rr = rr_OA + t*ee_F
MM = rr.cross(FF)
$$ \boldsymbol M = \left[\begin{matrix}0\\0\\50\end{matrix}\right] $$

Example 3 - 3D case

Let \(F=100\) N in the line \(AB\). Determine the moment around the z axis at point \(O\).

Solution

\[ \boldsymbol r_{OA} = [5,0,2]^\mathsf T \]

\[ \boldsymbol r_{OB} = [3,1,0]^\mathsf T \]

\[ \boldsymbol F = F \boldsymbol e_{AB} \]

\[ \boldsymbol e_{AB} = \dfrac{\boldsymbol r_{AB}}{|\boldsymbol r_{AB}|} \]

\[ \boldsymbol M_O = \boldsymbol r_{OB} \times \boldsymbol F = \boldsymbol r_{OA} \times \boldsymbol F \]

\[ M_{Oz} = \boldsymbol M_O \cdot \boldsymbol e_z \]

rr_OA = sp.Matrix([5,0,2])
rr_OB = sp.Matrix([3,1,0])
rr_AB = rr_OB - rr_OA
ee_AB = rr_AB.normalized()
FF = 100*ee_AB

MM_O = rr_OA.cross(FF)
MM_O

\(\displaystyle \left[\begin{matrix}- \frac{200}{3}\\200\\\frac{500}{3}\end{matrix}\right]\)

MM_O = rr_OB.cross(FF)
MM_O

\(\displaystyle \left[\begin{matrix}- \frac{200}{3}\\200\\\frac{500}{3}\end{matrix}\right]\)

Code
M_Oz = MM_O.dot(sp.Matrix([0,0,1]))
M_Oz

\(\displaystyle \frac{500}{3}\)

Example 4 - General projection

Let \(F=120\)N and compute the moment around the \(OA\) axis.

Solution

We need to compute the moment vector at \(O\) and then project it onto the \(OA\) axis.

\[ M_{OA} = \boldsymbol M_O \cdot \boldsymbol e_{OA} \]

rr_OA = sp.Matrix([1,4,0])
rr_OB = sp.Matrix([1,4,2])
rr_OC = sp.Matrix([5,0,0])
rr_BC = rr_OC - rr_OB
ee_BC = rr_BC.normalized()
FF = 120*ee_BC
FF

\(\displaystyle \left[\begin{matrix}80\\-80\\-40\end{matrix}\right]\)

MM_O = rr_OB.cross(FF)
MM_O

\(\displaystyle \left[\begin{matrix}0\\200\\-400\end{matrix}\right]\)

ee_OA = rr_OA.normalized()
MM_OA = MM_O.dot(ee_OA).evalf(4)
MM_OA

\(\displaystyle 194.0\)