2023-05-19 10:24:58 +02:00
|
|
|
\section{Theoretical Background}
|
2023-05-28 10:14:47 +02:00
|
|
|
The theoretical background is everything related to the physics part of the
|
|
|
|
project. It covers the calculating the inertia of different types of polygons;
|
|
|
|
different algorithms to detect whether there is a collision between two
|
|
|
|
polygons; the resolution of the collision, i.e. finding the final
|
|
|
|
velocity vectors and angular speed of those polygons.
|
|
|
|
|
|
|
|
\subsection{Moment of inertia}
|
|
|
|
|
|
|
|
The inertia of an object refers to the tendency of an object to resist a change
|
|
|
|
of its state of motion or rest, it describes how the object behaves when forces
|
|
|
|
are applied to it. An object with a lot of inertia requires more force to change
|
|
|
|
its motion, either to make it move if it's at rest or to stop it if it's already
|
|
|
|
moving. On the other hand, an object with less inertia is easier to set in
|
|
|
|
motion or bring to a halt.
|
|
|
|
|
|
|
|
The moment of inertia is similar but is used in a slightly different context, it
|
|
|
|
specifically refers to the rotational inertia of an object. It measures an
|
|
|
|
object's resistance to changes in its rotational motion and how its mass is
|
|
|
|
distributed with respect to is axis of rotation.
|
|
|
|
|
|
|
|
In the case of this project the axis of rotation is the one along the $z$-axis
|
|
|
|
(perpendicular to the plane of the simulation) and placed at the barycenter of
|
|
|
|
the polygon.
|
|
|
|
|
|
|
|
The general formula for the moment of inertia is
|
2023-06-06 11:24:25 +02:00
|
|
|
\begin{equation}
|
|
|
|
\label{eq:moment_general}
|
|
|
|
I_Q = \int \vec r^2 \rho(\vec r) \diff \mathcal{A}
|
|
|
|
\end{equation}
|
2023-05-28 10:14:47 +02:00
|
|
|
where $\rho$ is the density of object $Q$ in the point $\vec r$ across the
|
2023-06-06 11:24:25 +02:00
|
|
|
small pieces of area $\mathcal A$ of the object.
|
2023-05-28 10:14:47 +02:00
|
|
|
|
|
|
|
In our case, since we are implementing a 2D engine we can use the $\mathbb{R}^2$
|
|
|
|
coordinate systems, thus the formula becomes
|
|
|
|
$$ I_Q = \iint \rho(x, y) \vec r^2 \diff x\diff y$$
|
|
|
|
and since the requirements express that the mass of the polygons is spread
|
|
|
|
uniformly across its surface, the formula finally becomes
|
|
|
|
\begin{equation}
|
|
|
|
\label{eq:moment}
|
|
|
|
I_Q = \rho \iint x^2 + y^2 \diff x\diff y
|
|
|
|
\end{equation}
|
|
|
|
|
|
|
|
The bounds of the integral depend on the shape of the polygon. In the following
|
|
|
|
sections, we will describe how to compute those bounds, then we will show a
|
|
|
|
different technique to compute the moment of inertia of arbitrary polygons.
|
|
|
|
|
|
|
|
\subsubsection{Rectangle}
|
|
|
|
The moment of inertia of a rectangle of width $w$ and height $h$ with respect to
|
|
|
|
the axis of rotation that passes through its barycenter can be visualized in the
|
|
|
|
\figref{fig:rectangle_inertia}.
|
|
|
|
|
|
|
|
\begin{figure}[H]
|
|
|
|
\centering
|
|
|
|
\hfill
|
|
|
|
\begin{subfigure}[]{.4\textwidth}
|
|
|
|
\centering
|
|
|
|
\inputtikz{rectangle_inertia2d}
|
|
|
|
\caption{2d view of rectangle with axis of rotation}
|
|
|
|
\label{fig:rectangle_inertia2d}
|
|
|
|
\end{subfigure}
|
|
|
|
\hfill
|
|
|
|
\begin{subfigure}[]{.4\textwidth}
|
|
|
|
\centering
|
|
|
|
\inputtikz{rectangle_inertia3d}
|
|
|
|
\caption{3d view of rectangle with axis of rotation}
|
|
|
|
\label{fig:rectangle_inertia3d}
|
|
|
|
\end{subfigure}
|
|
|
|
\hfill\null
|
|
|
|
\caption{Representation of rectangle with respect to axis of rotation $z$}
|
|
|
|
\label{fig:rectangle_inertia}
|
|
|
|
\end{figure}
|
|
|
|
|
|
|
|
As figure \figref{fig:rectangle_inertia2d} implies, the bounds of equation
|
|
|
|
\ref{eq:moment} are trivial to derive:
|
|
|
|
\begin{equation}
|
|
|
|
\label{eq:rect_moment}
|
|
|
|
I_{\text{rect}} = \rho \int_{-\frac{h}{2}}^{\frac{h}{2}}
|
|
|
|
\int_{-\frac{w}{2}}^{\frac{w}{2}} x^2 + y^2 \diff x \diff y
|
|
|
|
= \frac{\rho wh}{12} \left( w^2 + h^2 \right)
|
|
|
|
\end{equation}
|
|
|
|
and since $\rho w h$ is the density of the rectangle multiplied by its area, we
|
|
|
|
can replace this term by its mass $m$, thus
|
|
|
|
\begin{equation}
|
|
|
|
I_{\text{rect}} = \frac{1}{12} m\left(w^2 + h^2\right)
|
|
|
|
\end{equation}
|
|
|
|
|
|
|
|
All the steps to compute equation~\ref{eq:rect_moment} can be found in equation
|
|
|
|
\ref{eq:rect_moment_long} in Appendix \ref{appendix:calculations}.
|
|
|
|
|
|
|
|
\subsubsection{Regular Polygons}
|
2023-06-06 11:24:25 +02:00
|
|
|
\label{sub:regular_polygons}
|
2023-05-28 10:14:47 +02:00
|
|
|
A regular polygon is a shape that has sides of equal length and angles between
|
|
|
|
those sides of equal measure. A polygon of $n$ sides can be subdivided in $n$
|
|
|
|
congruent (and isosceles since they are all the radius of the circumscribing
|
|
|
|
circle) triangles that all meet in the polygon's barycenter,
|
|
|
|
as demonstrated in Figure \ref{fig:pentagon_triangles} with a pentagon.
|
|
|
|
|
|
|
|
\begin{figure}[H]
|
|
|
|
\centering
|
|
|
|
\hfill
|
|
|
|
\begin{subfigure}[]{.45\textwidth}
|
|
|
|
\centering
|
|
|
|
\inputtikz[.6]{pentagon}
|
|
|
|
\caption{Regular polygon of 5 sides with its barycenter}
|
|
|
|
\label{fig:pentagon}
|
|
|
|
\end{subfigure}
|
|
|
|
\hfill
|
|
|
|
\begin{subfigure}[]{.45\textwidth}
|
|
|
|
\centering
|
|
|
|
\inputtikz[.6]{pentagon_congruent}
|
|
|
|
\caption{Pentagon divided in 5 congruent triangles}
|
|
|
|
\label{fig:pentagon_triangles}
|
|
|
|
\end{subfigure}
|
|
|
|
\hfill\null
|
|
|
|
\caption{Subdivision of regular polygons into congruent triangles}
|
|
|
|
\label{fig:regular_poly}
|
|
|
|
\end{figure}
|
|
|
|
|
|
|
|
If we define one of the sub-triangle of the regular polygon as $T$, then we can
|
|
|
|
find the moment of inertia $I_T$ when it is rotating about the barycenter. To
|
|
|
|
find the bounds of the integral in equation \ref{eq:moment}, we can take the
|
|
|
|
triangle $T$ and place it along the $x$-axis so that it is symmetric likes shown
|
|
|
|
in figure. Assuming the side length of the polygon is $l$, the height of the
|
|
|
|
triangle $T$ is $h$ and the angle of the triangle on the barycenter of the
|
|
|
|
polygon to be $\theta$, then
|
|
|
|
\begin{figure}[H]
|
|
|
|
\centering
|
|
|
|
\inputtikz[.3]{isosceles}
|
|
|
|
\caption{Sub-triangle $T$ of regular polygon}
|
|
|
|
\label{fig:subtriangle}
|
|
|
|
\end{figure}
|
|
|
|
we can see the bounds for the integral
|
|
|
|
\begin{equation}
|
|
|
|
\label{eq:subtriangle_moment}
|
|
|
|
I_{T} = \rho \int_0^h\int_{-\frac{lx}{2h}}^{\frac{lx}{2h}}x^2 + y^2 \diff
|
|
|
|
y\diff x= \frac{m_Tl^2}{24} \left(1 + 3\cot^2\left(\frac{\theta}{2}\right)\right)
|
|
|
|
\end{equation}
|
|
|
|
|
|
|
|
All the steps to compute equation~\ref{eq:subtriangle_moment} can be found in
|
|
|
|
equation \ref{eq:subtriangle_moment_long} in Appendix
|
|
|
|
\ref{appendix:calculations}.
|
|
|
|
|
|
|
|
Now that we have the moment of inertia of the sub-triangle, we can make the link
|
|
|
|
to the overall polygon. Since
|
|
|
|
$$ \theta = \frac{2\pi}{n} \implies \frac{\theta}{2} = \frac{\pi}{n} $$
|
2023-06-06 11:24:25 +02:00
|
|
|
and the moment of inertia are additive (as long they are as they are about the
|
|
|
|
same axis) we can get the moment of inertia with
|
2023-05-28 10:14:47 +02:00
|
|
|
$$ I_{\text{regular}} = n I_T $$
|
|
|
|
and since the mass of the regular polygon $m$ is the sum of the masses of the
|
|
|
|
sub-triangle
|
|
|
|
$$ m = n m_T $$
|
|
|
|
we have that
|
|
|
|
\begin{equation}
|
|
|
|
\label{eq:regular_moment}
|
|
|
|
I_{\text{regular}} = \frac{ml^2}{24} \left( 1 + 3\cot^2\left(\frac{\pi}{n}\right) \right)
|
|
|
|
\end{equation}
|
|
|
|
|
2023-06-06 11:24:25 +02:00
|
|
|
\subsubsection{Arbitrary Polygons}
|
|
|
|
|
|
|
|
For arbitrary polygons, we are taking a slightly different approach. Using the
|
|
|
|
Cartesian coordinate system to solve the equation \ref{eq:moment} revealed to be
|
|
|
|
more cumbersome than useful. But similarly to regular polygons (c.f. Section
|
|
|
|
\ref{sub:regular_polygons}), we can use the additive property of the moment
|
|
|
|
inertia to divide our arbitrary polygon into sub-triangles. As opposed to
|
|
|
|
regular polygons, these triangles won't be congruent, so we can't just get the
|
|
|
|
moment of inertia of one of them and multiply it by the number of sides, but we
|
|
|
|
need to calculate them individually. So given a polygon of $n$ sides, we can
|
|
|
|
construct $n$ sub-triangles $T_i$, for $i = 1, \dots, n$. So the moment of
|
|
|
|
inertia $I$ of the polygon will be
|
|
|
|
\begin{equation}
|
|
|
|
I = \sum_i I_{T_i}
|
|
|
|
\end{equation}
|
|
|
|
\begin{figure}[H]
|
|
|
|
\centering
|
|
|
|
\begin{subfigure}[]{.5\textwidth}
|
|
|
|
\centering
|
|
|
|
\inputtikz[.7]{arbitrary}
|
|
|
|
\caption{An arbitrary 6-sided polygon}
|
|
|
|
\label{fig:arbitrary}
|
|
|
|
\end{subfigure}
|
|
|
|
\begin{subfigure}[]{.49\textwidth}
|
|
|
|
\centering
|
|
|
|
\inputtikz[.7]{arbitrary_divided}
|
|
|
|
\caption{Arbitrary polygon divided into 6 sub-triangles}
|
|
|
|
\label{fig:abitrary_divded}
|
|
|
|
\end{subfigure}
|
|
|
|
\end{figure}
|
2023-05-28 10:14:47 +02:00
|
|
|
|
2023-06-06 11:24:25 +02:00
|
|
|
To calculate the moment of inertia $I_{T_i}$, instead of using the classical
|
|
|
|
$x$- and $y$-axis as we did before, we decided to use the edges of the triangle
|
|
|
|
as axis and therefore express what we need to integrate in function of those as
|
|
|
|
can be seen in Figure \ref{fig:abitrary_subtriangle}.
|
|
|
|
\begin{figure}[H]
|
|
|
|
\centering
|
|
|
|
\inputtikz[.7]{arbitrary_subtriangle}
|
|
|
|
\caption{Sub-triangle of arbitrary polygon}
|
|
|
|
\label{fig:abitrary_subtriangle}
|
|
|
|
\end{figure}
|
2023-05-28 10:14:47 +02:00
|
|
|
|
2023-06-06 11:24:25 +02:00
|
|
|
In Figure \ref{fig:abitrary_subtriangle}, $C$ represent the barycenter of the
|
|
|
|
polygon (as is shown in Figure \ref{fig:abitrary_divded}). The axis we are going
|
|
|
|
to integrate on are $\vv{CA}$ and $\vv{AB}$.
|
|
|
|
We can now define
|
|
|
|
\begin{equation} \label{eq:alpha}
|
|
|
|
\vv{CP_1} = \alpha \vv{CA}, \qquad \vv{CP_2} = \alpha
|
|
|
|
\vv{CB}, \qquad \forall \alpha \in [0, 1]
|
|
|
|
\end{equation}
|
|
|
|
and
|
|
|
|
$$ \vv{P_1Q} = \beta \vv{P_1P_2}, \qquad \forall \beta \in [0, 1] $$
|
|
|
|
|
|
|
|
From \ref{eq:alpha}, it quickly follows that
|
|
|
|
\[
|
|
|
|
\vv{P_1P_2} = \alpha \vv{AB}
|
|
|
|
\]
|
|
|
|
therefore
|
|
|
|
\begin{equation} \label{eq:beta_alpha}
|
|
|
|
\vv{P_1Q} = \beta \alpha \vv{AB}
|
|
|
|
\end{equation}
|
|
|
|
Finally, if we put together equations \ref{eq:alpha} and \ref{eq:beta_alpha}, we
|
|
|
|
have that
|
|
|
|
\begin{equation}\label{eq:r}
|
|
|
|
\vec r = \vv{CP_1} + \vv{P_1Q} = \alpha \vv{CA} + \beta \alpha \vv{AB}
|
|
|
|
\end{equation}
|
|
|
|
|
|
|
|
Now we got the first part equation \ref{eq:moment_general}. To find the $\diff
|
|
|
|
\mathcal A$, we
|
|
|
|
just need to get the area of the square that contains $Q$ in Figure
|
|
|
|
\ref{fig:abitrary_subtriangle}. Since $\|\vv{AB}\|$ represents the base of the
|
|
|
|
triangle $T_i$, we can define
|
|
|
|
$$ b = \| \vv{AB}\| $$
|
|
|
|
we consequently have that
|
|
|
|
\begin{equation} \label{eq:dA}
|
|
|
|
\diff \mathcal{A} = b \alpha \diff \beta h\diff \alpha
|
|
|
|
\end{equation}
|
|
|
|
where $h = \| \vv{CH} \|$ is the height of triangle.
|
|
|
|
We can now assemble \ref{eq:r} and \ref{eq:dA}
|
|
|
|
\begin{equation}
|
|
|
|
\label{eq:subtriangle_arbitrary_moment}
|
|
|
|
I_{T_i} = \rho \int_0^1 \int_0^1 \vec r^2 hb \alpha \diff \alpha
|
|
|
|
\diff \beta = \frac{\rho h b}{4} \left(\frac{1}{3} \vv{AB}^2 +
|
|
|
|
\vv{AB} \cdot \vv{CA} + \vv{CA}^2\right)
|
|
|
|
\end{equation}
|
|
|
|
|
|
|
|
Since $\frac{\rho h b}{2}$ is the mass of the triangle we can write the result
|
|
|
|
as
|
|
|
|
\begin{equation}
|
|
|
|
I_{T_i} = \frac{m_{T_i}}{2} \left(\frac{1}{3} \vv{AB}^2 + \vv{AB} \cdot \vv{CA}
|
|
|
|
+ \vv{CA}^2\right)
|
|
|
|
\end{equation}
|
|
|
|
|
|
|
|
|
|
|
|
All the steps to compute equation~\ref{eq:subtriangle_arbitrary_moment} can be
|
|
|
|
found in equation \ref{eq:subtriangle_arbitrary_moment_long} in Appendix
|
|
|
|
\ref{appendix:calculations}.
|
|
|
|
|
|
|
|
Now that we have the moment of inertia of the sub-triangle, we can make the link
|
|
|
|
to the overall polygon.
|
|
|
|
\begin{equation}
|
|
|
|
I_{\text{arbitrary}} = \sum_i I_{T_i} = \sum_{i=1}^n \frac{m_{T_i}}{2}
|
|
|
|
\left(\frac{1}{3} \vv{P_iP_{i+1}}^2 + \vv{CP_i} \cdot \vv{P_iP_{i+1}} +
|
|
|
|
\vv{CP_i}^2\right)
|
|
|
|
\end{equation}
|
|
|
|
where, $P_{n+1} = P_1$ in the case of $i = n$.
|
2023-05-28 10:14:47 +02:00
|
|
|
|
|
|
|
\subsection{Collision detection}
|
|
|
|
\subsubsection{Separating Axis Theorem}
|
|
|
|
\subsubsection{Vertex collisions}
|
|
|
|
|
|
|
|
\subsection{Collision resolution}
|
|
|
|
\label{sub:resolution}
|
|
|
|
\cite{collision:resolution}
|
|
|
|
\subsubsection{Physics}
|
|
|
|
\subsubsection{Solving for the impulse parameter}
|