Marcos Duarte, Renato Naville Watanabe
Laboratory of Biomechanics and Motor Control
Federal University of ABC, Brazil
import numpy as np
import matplotlib.pyplot as plt
A good knowledge of Mechanics is a necessary condition, although not sufficient!, to master Biomechanics
For this reason, we will review principles of Classical Mechanics in the context of Biomechanics.
The book Introduction to Statics and Dynamics, written by Andy Ruina and Rudra Pratap, is an excellent reference (a rigorous and yet didactic presentation of Mechanics for undergraduate students) on Classical Mechanics. The preface and first chapter of the book are a good read on how someone should study Mechanics. You should read them!
Most of the content in this notebook is covered in chapter 12 of the Ruina and Rudra's book and in chapter 1 of the Rade's book.
As we argued in the notebook Biomechanics, we will start with a branch of Classical Mechanics that is simpler to measure its related quantities on biological systems, the Kinematics.
There are some relevant cases in the study of human movement where modeling the human body or one of its segments as a particle might be all we need to explore the phenomenon. The concept of kinematics of a particle, for instance, can be applied to study the performance in the 100-m race; to describe spatial and temporal characteristics of a movement pattern, and to conjecture about how voluntary movements are planned (the minimum jerk hypothesis).
Now, let's review the concept of kinematics of a particle and later apply to the study of human movement.
Kinematics is the branch of Classical Mechanics that describes the motion of objects without consideration of the causes of motion (Wikipedia).
Kinematics of a particle is the description of the motion when the object is considered a particle.
A particle as a physical object does not exist in nature; it is a simplification to understand the motion of a body or it is a conceptual definition such as the center of mass of a system of objects.
Some mechanical quantities in Kinematics (position and its derivatives) are represented as vectors and others, such as time and distance, are scalars.
A vector in Mechanics is a physical quantity with magnitude, direction, and satisfies some elementary vector arithmetic, whereas a scalar is a physical quantity that is fully expressed by a magnitude (a number) only.
For a review about scalars and vectors, see chapter 1 of Ruina and Rudra's book.
For how to use Python to work with scalars and vectors, see the notebook Scalar and Vector.
Consider a point in the three-dimensional Euclidean space described in a Cartesian coordinate system (see the notebook Frame of reference for an introduction on coordinate systems in Mechanics and Biomechanics):
The position of this point in space can be represented as a triple of values each representing the coordinate at each axis of the Cartesian coordinate system following the $ \mathbf{X, Y, Z} $ convention order (which is omitted):
\begin{equation} (x,\, y,\, z) \label{eq_xyz} \end{equation}The position of a particle in space can also be represented by a vector in the Cartesian coordinate system, with the origin of the vector at the origin of the coordinate system and the tip of the vector at the point position:
\begin{equation} \overrightarrow{\mathbf{r}}(t) = x\,\hat{\mathbf{i}} + y\,\hat{\mathbf{j}} + z\,\hat{\mathbf{k}} \label{eq_rxyz} \end{equation}Where $\hat{\mathbf{i}},\, \hat{\mathbf{j}},\, \hat{\mathbf{k}}\,$ are unit vectors in the directions of the axes $ \mathbf{X, Y, Z} $.
For a review on vectors, see the notebook Scalar and vector.
With this new notation, the coordinates of a point representing the position of a particle that vary with time would be expressed by the following position vector $\overrightarrow{\mathbf{r}}(t)$:
\begin{equation} \overrightarrow{\mathbf{r}}(t) = x(t)\,\hat{\mathbf{i}} + y(t)\,\hat{\mathbf{j}} + z(t)\,\hat{\mathbf{k}} \label{eq_rxyzijk} \end{equation}A vector can also be represented in matrix form:
\begin{equation} \overrightarrow{\mathbf{r}}(t) = \begin{bmatrix} x(t) \\y(t) \\z(t) \end{bmatrix} \label{eq_rxyzmatrix} \end{equation}And the unit vectors in each Cartesian coordinate in matrix form are given by:
\begin{equation} \hat{\mathbf{i}} = \begin{bmatrix}1\\0\\0 \end{bmatrix},\; \hat{\mathbf{j}} = \begin{bmatrix}0\\1\\0 \end{bmatrix},\; \hat{\mathbf{k}} = \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix} \label{eq_ijk} \end{equation}In linear algebra, a set of unit linearly independent vectors as the three vectors above (orthogonal in the Euclidean space) that can represent any vector via linear combination is called a basis. A basis is the foundation of creating a reference frame and we will study how to do that other time.
The shortest distance between two positions of a particle.
As the difference between two vectors, displacement is also a vector quantity.
\begin{equation} \mathbf{\overrightarrow{d}} = \mathbf{\overrightarrow{r}_2} - \mathbf{\overrightarrow{r}_1} \label{eq_distance} \end{equation}Velocity is the rate (with respect to time) of change of the position of a particle.
The average velocity between two instants is:
\begin{equation} \overrightarrow{\mathbf{v}}(t) = \frac{\overrightarrow{\mathbf{r}}(t_2)-\overrightarrow{\mathbf{r}}(t_1)}{t_2-t_1} = \frac{\Delta \overrightarrow{\mathbf{r}}}{\Delta t} \label{eq_velocity} \end{equation}The instantaneous velocity of the particle is obtained when $\Delta t$ approaches to zero, which from calculus is the first-order derivative of the position vector:
\begin{equation} \overrightarrow{\mathbf{v}}(t) = \lim_{\Delta t \to 0} \frac{\Delta \overrightarrow{\mathbf{r}}}{\Delta t} = \lim_{\Delta t \to 0} \frac{\overrightarrow{\mathbf{r}}(t+\Delta t)-\overrightarrow{\mathbf{r}}(t)}{\Delta t} = \frac{\mathrm{d}\overrightarrow{\mathbf{r}}}{dt} \label{eq_velocityderiv} \end{equation}For the movement of a particle described with respect to an inertial Frame of reference, the derivative of a vector is obtained by differentiating each vector component of the Cartesian coordinates (since the base versors $\hat{\mathbf{i}}, \hat{\mathbf{j}}, \hat{\mathbf{k}}$ are constant):
\begin{equation} \overrightarrow{\mathbf{v}}(t) = \frac{\mathrm{d}\overrightarrow{\mathbf{r}}(t)}{dt} = \frac{\mathrm{d}x(t)}{\mathrm{d}t}\hat{\mathbf{i}} + \frac{\mathrm{d}y(t)}{\mathrm{d}t}\hat{\mathbf{j}} + \frac{\mathrm{d}z(t)}{\mathrm{d}t}\hat{\mathbf{k}} \label{eq_velocityderiv2} \end{equation}Or in matrix form (and using the Newton's notation for differentiation):
\begin{equation} \overrightarrow{\mathbf{v}}(t) = \begin{bmatrix} \dot x(t) \\ \dot y(t) \\ \dot z(t) \end{bmatrix} \label{eq_velocityderiv3} \end{equation}Acceleration is the rate (with respect to time) of change of the velocity of a particle, which can also be given by the second-order rate of change of the position.
The average acceleration between two instants is:
\begin{equation} \overrightarrow{\mathbf{a}}(t) = \frac{\overrightarrow{\mathbf{v}}(t_2)-\overrightarrow{\mathbf{v}}(t_1)}{t_2-t_1} = \frac{\Delta \overrightarrow{\mathbf{v}}}{\Delta t} \label{eq_acc} \end{equation}Likewise, instantaneous acceleration is the first-order derivative of the velocity or the second-order derivative of the position vector:
\begin{equation} \overrightarrow{\mathbf{a}}(t) = \frac{\mathrm{d}\overrightarrow{\mathbf{v}}(t)}{\mathrm{d}t} = \frac{\mathrm{d}^2\overrightarrow{\mathbf{r}}(t)}{\mathrm{d}t^2} = \frac{\mathrm{d}^2x(t)}{\mathrm{d}t^2}\hat{\mathbf{i}} + \frac{\mathrm{d}^2y(t)}{\mathrm{d}t^2}\hat{\mathbf{j}} + \frac{\mathrm{d}^2z(t)}{\mathrm{d}t^2}\hat{\mathbf{k}} \label{eq_accderiv} \end{equation}And in matrix form:
\begin{equation} \overrightarrow{\mathbf{a}}(t) = \begin{bmatrix} \ddot x(t) \\ \ddot y(t) \\ \ddot z(t) \end{bmatrix} \label{eq_accderiv2} \end{equation}For curiosity, see Notation for differentiation on the origin of the different notations for differentiation.
When the base versors change in time, for instance when the basis is attached to a rotating frame or reference, the components of the vector’s derivative is not the derivatives of its components; we will also have to consider the derivative of the basis with respect to time.
As the acceleration is the derivative of the velocity which is the derivative of position, the inverse mathematical operation is the antiderivative (or integral):
\begin{equation} \begin{array}{l l} \mathbf{r}(t) = \mathbf{r}_0 + \int \mathbf{v}(t) \:\mathrm{d}t \\ \mathbf{v}(t) = \mathbf{v}_0 + \int \mathbf{a}(t) \:\mathrm{d}t \end{array} \label{eq_antiderivative} \end{equation}To deduce some trivial cases of motion of a particle (at rest, at constant speed, and at constant acceleration), we can start from the equation for its position and differentiate it to obtain expressions for the velocity and acceleration or the inverse approach, start with the equation for acceleration, and then integrate it to obtain the velocity and position of the particle. Both approachs are valid in Mechanics. For the present case, it probaly makes more sense to start with the expression for acceleration.
t = np.linspace(0, 2, 101)
print('t:', t)
r0 = 1
v0 = 2
a0 = 4
r = r0 + v0*t + 1/2*a0*t**2
print('r:', r)
t: [0. 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 1. 1.02 1.04 1.06 1.08 1.1 1.12 1.14 1.16 1.18 1.2 1.22 1.24 1.26 1.28 1.3 1.32 1.34 1.36 1.38 1.4 1.42 1.44 1.46 1.48 1.5 1.52 1.54 1.56 1.58 1.6 1.62 1.64 1.66 1.68 1.7 1.72 1.74 1.76 1.78 1.8 1.82 1.84 1.86 1.88 1.9 1.92 1.94 1.96 1.98 2. ] r: [ 1. 1.0408 1.0832 1.1272 1.1728 1.22 1.2688 1.3192 1.3712 1.4248 1.48 1.5368 1.5952 1.6552 1.7168 1.78 1.8448 1.9112 1.9792 2.0488 2.12 2.1928 2.2672 2.3432 2.4208 2.5 2.5808 2.6632 2.7472 2.8328 2.92 3.0088 3.0992 3.1912 3.2848 3.38 3.4768 3.5752 3.6752 3.7768 3.88 3.9848 4.0912 4.1992 4.3088 4.42 4.5328 4.6472 4.7632 4.8808 5. 5.1208 5.2432 5.3672 5.4928 5.62 5.7488 5.8792 6.0112 6.1448 6.28 6.4168 6.5552 6.6952 6.8368 6.98 7.1248 7.2712 7.4192 7.5688 7.72 7.8728 8.0272 8.1832 8.3408 8.5 8.6608 8.8232 8.9872 9.1528 9.32 9.4888 9.6592 9.8312 10.0048 10.18 10.3568 10.5352 10.7152 10.8968 11.08 11.2648 11.4512 11.6392 11.8288 12.02 12.2128 12.4072 12.6032 12.8008 13. ]
# a simple plot
plt.plot(t, r);
# a more decorated plot
plt.rc('axes', labelsize=14, titlesize=14)
plt.rc('xtick', labelsize=10)
plt.rc('ytick', labelsize=10)
f, axarr = plt.subplots(3, 3, sharex = True, sharey = True, figsize=(14,7))
plt.suptitle('Scalar kinematics of a particle', fontsize=20);
tones = np.ones(np.size(t))
axarr[0, 0].set_title('at rest', fontsize=14);
axarr[0, 0].plot(t, r0*tones, 'g', linewidth=4, label='$r(t)=1$')
axarr[1, 0].plot(t, 0*tones, 'b', linewidth=4, label='$v(t)=0$')
axarr[2, 0].plot(t, 0*tones, 'r', linewidth=4, label='$a(t)=0$')
axarr[0, 0].set_ylabel('r(t) [m]')
axarr[1, 0].set_ylabel('v(t) [m/s]')
axarr[2, 0].set_ylabel('a(t) [m/s$^2$]')
axarr[0, 1].set_title('at constant speed');
axarr[0, 1].plot(t, r0*tones+v0*t, 'g', linewidth=4, label='$r(t)=1+2t$')
axarr[1, 1].plot(t, v0*tones, 'b', linewidth=4, label='$v(t)=2$')
axarr[2, 1].plot(t, 0*tones, 'r', linewidth=4, label='$a(t)=0$')
axarr[0, 2].set_title('at constant acceleration');
axarr[0, 2].plot(t, r0*tones+v0*t+1/2.*a0*t**2,'g', linewidth=4,
label='$r(t)=1+2t+\\frac{1}{2}4t^2$')
axarr[1, 2].plot(t, v0*tones+a0*t, 'b', linewidth=4,
label='$v(t)=2+4t$')
axarr[2, 2].plot(t, a0*tones, 'r', linewidth=4,
label='$a(t)=4$')
for i in range(3):
axarr[2, i].set_xlabel('Time [s]');
for j in range(3):
axarr[i,j].set_ylim((-.2, 10))
axarr[i,j].legend(loc = 'upper left', frameon=True, framealpha = 0.9, fontsize=14)
plt.subplots_adjust(hspace=0.09, wspace=0.07)
import sympy as sym
sym.init_printing(use_latex='mathjax') # print pretty symbols
t = sym.symbols('t', real=True)
r0, v0, a0 = sym.symbols('r0, v0, a0', real=True, constant=True)
v = sym.integrate(a0, t) + v0 # a constant has to be added
v
r = sym.integrate(v, t) + r0 # a constant has to be added
r
We can also plot a symbolic expression in a given range after we substitute the symbolic variables with numbers:
from sympy.plotting import plot
r_n = r.subs({r0:1, v0:2, a0:4}) # r0=1 ... does not work!
plot(r_n, (t, 0, 2), xlim=(0, 2), ylim=(0, 10), axis_center=(0, 0), line_color='g',
xlabel='Time [s]', ylabel='r(t) [m]', legend=True,
title='Scalar kinematics of a particle at constant acceleration',
backend='matplotlib', size=(5, 3));
An example where the analysis of some aspects of the human body movement can be reduced to the analysis of a particle is the study of the Biomechanics of the 100-m race.
A technical report with the kinematic data for the 100-m world record by Usain Bolt can be downloaded from the website for Research Projects from the International Association of Athletics Federations.
Here is a direct link for that report. In particular, the following table shows the data for the three medalists in that race:
The column RT in the table above refers to the reaction time of each athlete. The IAAF has a very strict rule about reaction time: any athlete with a reaction time less than 100 ms is disqualified from the competition! See the website Reaction Times and Sprint False Starts for a discussion about this rule.
You can measure your own reaction time in a simple way visiting this website: http://www.humanbenchmark.com/tests/reactiontime.
The article A Kinematics Analysis Of Three Best 100 M Performances Ever by Krzysztof and Mero presents a detailed kinematic analysis of 100-m races.
Answer the 12 questions of the Khan Academy's test on one-dimensional motion.
Consider the data for the three medalists of the 100-m dash in Berlin, 2009, shown previously.
a. Calculate the average velocity and acceleration.
b. Plot the graphs for the displacement, velocity, and acceleration versus time.
c. Plot the graphs velocity and acceleration versus partial distance (every 20m).
d. Calculate the average velocity and average acceleration and the instants and values of the peak velocity and peak acceleration.
The article "Biomechanical Analysis of the Sprint and Hurdles Events at the 2009 IAAF World Championships in Athletics" by Graubner and Nixdorf lists the 10-m split times for the three medalists of the 100-m dash in Berlin, 2009 and is shown below.
a. Repeat the same calculations performed in problem 2 and compare the results.
On an Olympic running track, runners A and B start running on the first lane (a.k.a., the inside lane) from the same position on the track, but in opposite directions. If $\lVert v_A \rVert=4$ m/s and $\lVert v_B \rVert=6$ m/s, how far from the starting line will the runners meet?
A body attached to a spring has its position (in cm) described by the equation $x(t) = 2\sin(4\pi t + \pi/4)$.
a. Calculate the equation for the body velocity and acceleration.
b. Plot the position, velocity, and acceleration in the interval [0, 1] s.
The rectilinear motion of a particle is given by $x(t) = -12t^3 + 15t^2 + 5t + 2$ [s; m]. Calculate:
a. Velocity and acceleration of the particle as a function of time. Solution: $v(t)=36t^2+30t+5$ [s; m/s], $a(t)=-72t+30$ [s; m/s2].
b. Total distance traveled by the particle in the interval $0 \leq t \leq 4$ s. Solution: $\Delta_{0-4}=524.02$m.
c. Maximum value of the velocity module reached by the particle in the interval $0 \leq t \leq 4$ s. Solution: $\lVert v_{max} \rVert=451.0$m/s.
d. Plots of the position, velocity and acceleration of the particle in the interval $0 \leq t \leq 4$ s.
A stone is released from the opening of a well, and the noise from its fall to the bottom is heard 4 seconds later. Knowing that the speed of sound in air is 340 m/s, determine the depth of the well. Solution: $h=70.55$m.
The position of a particle is given by $\overrightarrow{\mathbf{r}}(t)=(t^2\hat{\mathbf{i}}+e^{t}\hat{\mathbf{j}})$.
a. Calculate the velocity and acceleration of the particle as functions of time.
b. Draw the path of the particle and show the vectors $\overrightarrow{\mathbf{v}}(t)$ and $\overrightarrow{\mathbf{a}}(t)$ at $t=1$s.
Sometimes all we have access to is the image with plotted data that interests us. For example, the first figure shown in this Notebook contains velocity versus position data for Usain Bolt's 100m sprint at a much higher resolution than the numerical data shown here. If we want to access numerical data from an image, it is possible to extract this information using some software to automatically identify points of interest. If points cannot be extracted automatically, you may need to do it manually. The WebPlotDigitizer software is one such tool. Try using it to extract the data from the quoted figure. Note: it won't be easy; you may have to do this manually. Anyway, know that such a tool exists.
There are some nice free software that can be used for the kinematic analysis of human motion. Some of them are: Kinovea, Tracker, and SkillSpector. Visit their websites and explore these software to understand in which biomechanical applications they could be used.