2023-05-19 10:24:58 +02:00
|
|
|
\documentclass{usiinfbachelorproject}
|
|
|
|
|
2023-05-28 10:10:28 +02:00
|
|
|
\usepackage[]{caption}
|
|
|
|
\usepackage[]{url}
|
|
|
|
\usepackage[]{subcaption}
|
|
|
|
\usepackage[]{float}
|
|
|
|
|
|
|
|
\usepackage{tikz}
|
|
|
|
\usepackage{tkz-euclide}
|
|
|
|
\usetikzlibrary{external,shapes,through}
|
|
|
|
|
|
|
|
\tikzexternalize[prefix=figures/]
|
|
|
|
\tikzstyle{none}=[]
|
|
|
|
\input{./tikzs/styles.tikzstyles}
|
|
|
|
|
|
|
|
\pgfdeclarelayer{nodelayer}
|
|
|
|
\pgfdeclarelayer{edgelayer}
|
|
|
|
\pgfsetlayers{edgelayer,nodelayer,main}
|
|
|
|
|
|
|
|
\graphicspath{{../figures/}{./figures/}}
|
|
|
|
|
|
|
|
|
|
|
|
\newcommand*{\figref}[1]{\figurename~\ref{#1}}
|
|
|
|
|
2023-05-19 10:24:58 +02:00
|
|
|
\captionsetup{labelfont={bf}}
|
2023-05-28 10:10:28 +02:00
|
|
|
% \newcommand{\diff}{\mathop{}\!\mathrm{d}}
|
|
|
|
\newcommand{\diff}{\mathop{}\!\mathrm{d}}
|
2023-05-19 10:24:58 +02:00
|
|
|
|
|
|
|
\author{Arnaud Fauconnet}
|
|
|
|
|
2023-05-28 10:10:28 +02:00
|
|
|
\title{From Flying Balls to Colliding Polygons}
|
2023-05-19 10:24:58 +02:00
|
|
|
\subtitle{2D Physics Engine: Rigid Body Simulation}
|
|
|
|
\versiondate{\today}
|
|
|
|
|
|
|
|
\begin{committee}
|
|
|
|
\advisor[Universit\`a della Svizzera Italiana,
|
|
|
|
Switzerland]{Prof.}{Antonio}{Carzaniga}
|
|
|
|
\end{committee}
|
|
|
|
|
2023-05-28 10:10:28 +02:00
|
|
|
\newcommand{\inputtikz}[2][1]{
|
|
|
|
\resizebox{#1 \textwidth}{!}{
|
|
|
|
\tikzsetnextfilename{#2}
|
|
|
|
\input{../tikzs/#2.tikz}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-19 10:24:58 +02:00
|
|
|
\abstract {
|
|
|
|
Physics engines are a fun and interesting way to learn about a lot of
|
|
|
|
different subjects. First the theoretical concepts, such as the equations
|
|
|
|
that dictate the motion of the objects, together with their components, need
|
|
|
|
to be thoroughly understood. Then there is the necessity of finding a way to
|
|
|
|
represent all of those concepts in a given programming language and to
|
|
|
|
make them as efficient as possible so that the simulation runs fluidly.
|
|
|
|
The task to be completed here was to extend an already existing
|
|
|
|
physics engine that only made circles bounce off each other. The extension
|
|
|
|
was focused on having the ability to generate some arbitrary polygons and
|
|
|
|
make them bounce off each other in a physically accurate way. The main
|
|
|
|
issues that rose up during the development of the extension: determining the
|
|
|
|
inertia of a arbitrary polygon, which is important for realistic
|
|
|
|
impacts; having an accurate collision detection system, which allows the
|
|
|
|
engine to know when to make two polygons bounce off each other. Once those
|
|
|
|
aspects were worked on and polished, the rest of the implementation went
|
|
|
|
smoothly.
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
\usepackage{subfiles} % Best loaded last in the preamble
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\tableofcontents
|
|
|
|
|
|
|
|
|
|
|
|
\subfile{./sections/intro.tex}
|
|
|
|
\subfile{./sections/tech_background.tex}
|
|
|
|
\subfile{./sections/theoretical_background.tex}
|
|
|
|
\subfile{./sections/solution.tex}
|
|
|
|
\subfile{./sections/conclusion.tex}
|
|
|
|
|
|
|
|
%%%%%
|
|
|
|
\bibliographystyle{abbrv}
|
|
|
|
\bibliography{references}
|
|
|
|
|
|
|
|
\end{document}
|