10  Moments

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{ \mathbb M_O = \mathbb r \times \mathbb F } \]

where \(\mathbb r\) is known as the moment arm, and \(\mathbb 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 \]

Right-hand rule

We can derive the moment vector from the following figure:

Moments in 3D

\[ \mathbb{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]=\mathbb{r} \times \mathbb{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.

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

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

Figure 10.1: 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]\)

10.1 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)
$$ \mathbb 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.

10.2 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)
$$ \mathbb 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)
$$ \mathbb 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)
$$ \mathbb 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)
$$ \mathbb M = \left[\begin{matrix}0\\0\\50\end{matrix}\right] $$

10.3 Example 3 - 3D case

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

10.3.1 Solution

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

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

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

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

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

\[ M_{Oz} = \mathbb M_O \cdot \mathbb 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}\)

10.4 Example 4 - General projection

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

10.4.1 Solution

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

\[ M_{OA} = \mathbb M_O \cdot \mathbb 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\)