\documentclass[a4paper, 11pt]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[dutch]{babel} \usepackage[linesnumbered, algoruled, lined]{algorithm2e} \usepackage{float} \title{Project: Snijdende cirkels} \author{Arthur Bols \& Ruben Van Laer} \date{Mei 2019} \begin{document} \maketitle \section{Inleiding} In dit practicum trachten we aan de hand van algoritmes met vooropgestelde complexiteiten de snijpunten van een set van gegeven cirkels te bepalen. \section{Snijding van twee cirkels} \section{Hoogniveau beschrijving van de algoritmen} \subsection{Simpel algoritme $O(N^2)$} \begin{algorithm}[H] \{$cirkels$: lijst van cirkels met een middelpunt en een straal\}\\ $S \gets \emptyset$ \{$S$: lijst met alle snijpunten\}\\ \For{iedere $c_1$ in $cirkels$}{ \For{iedere $c_2$ in $cirkels$}{ $snpt \gets$ Snijpunten($c_1$,$c_2$)\\ \If{$snpt \neq \emptyset$}{ Voegtoe($S$,$snpt$) } } } \caption{Simpel Algoritme} \end{algorithm} \subsection{Doorlooplijnalgoritme $O(N^2)$} \begin{algorithm}[H] \{$cirkels$: lijst van cirkels met een middelpunt en een straal\}\\ $E \gets \emptyset$ \{$E$: gesorteerde rij met de horizontale begin- en eindpunten van elke cirkel (ook wel de 'Events' van de doorlooplijn)\}\\ \For{iedere $c$ in $cirkels$}{ $p_1 \gets$ Beginpunt($c$)\\ $p_2 \gets$ Eindpunt($c$)\\ Voegtoe($E$, $p_1$)\\ Voegtoe($E$, $p_2$) } $S \gets \emptyset$ \{$S$: lijst met alle snijpunten\}\\ $A \gets \emptyset$ \{$A$: lijst met cirkels die snijden met de doorlooplijn\}\\ \While{$E \neq \emptyset$}{ $e \gets$ Kleinste($E$)\\ Verwijder($E$, $e$)\\ \If{$e$ is een beginpunt}{ $c \gets$ Cirkel($e$)\\ \For{iedere $c_i$ in $A$}{ $snpt \gets$ Snijpunten($c$,$c_i$)\\ \If{$snpt \neq \emptyset$}{ Voegtoe($S$,$snpt$) } } Voegtoe($A$, $c$)\\ } \If{$e$ is een eindpunt}{ $c \gets$ Cirkel($e$)\\ Verwijder($A$, $c$) } } \caption{Doorlooplijnalgoritme $O(N^2)$} \end{algorithm} \section{Beschrijving experimenten en correctheid} \section{Bespreking resultaten en rekentijden} \end{document}