\documentclass[10pt,a4paper]{article}

\usepackage[dutch]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,hyperref,graphicx,booktabs,float}

% Link colors
\hypersetup{colorlinks=true,linkcolor=black,urlcolor=blue}

% Paragraph indentation
\setlength{\parindent}{0pt}
\setlength{\parskip}{1.5ex plus 0.5ex minus 0.2ex}

\title{Bachelor thesis\\Universal multi-touch event mechanism}
\author{\begin{tabular}{ll}
Name:           & Taddeüs Kroes\\
Student number: & 6054129\\
E-mail address: & \texttt{taddeus.kroes@student.uva.nl}\\
Adres:          & Wethouder van Wijckstraat 40, 1107 BR Amsterdam\\
Phone number:   & 06-23437025\\
supervisor:     & Dr. R.G. Belleman (UvA)\\
\end{tabular}}

\begin{document}

\maketitle
\pagebreak
\tableofcontents
\pagebreak

\section{Introduction}

% Ruwe probleemstelling
Multi-touch interaction is becoming increasingly common, mostly due to the wide
use of touch screens in phones and tablets. When programming applications using
this method of interaction, the programmer needs an abstraction of the raw data
provided by the touch driver of the device. This abstraction exists in several
multi-touch application frameworks like Nokia's
Qt\footnote{\url{http://qt.nokia.com/}}. However, applications that do not use
these frameworks consequently have no access to multi-touch events.

% Aanleiding
This problem was observed during an attempt to create a multi-touch
``interactor'' class for the Visualization Toolkit
(VTK\footnote{\url{http://www.vtk.org/}}).

% Ruw doel
The goal of this thesis is to define a universal multi-touch event triggering mechanism.

- Om een universeel multi-touch event 'gesture'-detectie te definiëren.

% Setting/afbakening
Dit onderzoek heeft als einddoel een Proof of Concept te maken, namelijk een
toepassing van de universele multi-touch gesture-detectie in een VTK interactor.

\subsection{Opbouw verslag}

In hoofdstuk \ref{sec:vraagstelling} wordt de probleemstelling vertaald naar
een doelstelling en een centrale vraagstelling.

Hoofdstuk \ref{sec:deelvragen} verdeelt de centrale vraagstelling in een
aantal deelvragen, die elk kort worden toegelicht.

Na de vraagstelling wordt in hoofdstuk \ref{sec:afbakening} de afbakening van
het onderzoeksgebied aangegeven.

Vervolgens wordt de gebruikte onderzoeksmethodiek beschreven in hoofdstuk
\ref{sec:methodiek}, bestaande uit een faseverdeling en een globale
tijdsplanning.

Tot slot wordt in hoofdstuk \ref{sec:gerelateerd} een blik geworpen op een
gerelateerd project.

\emph{- Rest v/d hoofdstukken beschrijven}

\section{Vraagstelling}
\label{sec:vraagstelling}

\subsection{Doelstelling}

Het doel van dit onderzoek is om een bijdrage te leveren aan het ontwikkelen
van een universeel datavisualisatie-programma.

In dit projectvoorstel zal naar het programma worden verwezen met de afkorting
``UVA'' (Universal Visualizaton Appliance).

\subsection{Centrale vraag}

Hoe kan een Proof of Concept voor een universeel datavisualisatie-programma
worden gerealiseerd, gericht op 3D-visualisatie en met multi-touch interactie?

\subsection{Deelvragen}
\label{sec:deelvragen}

\begin{itemize}

\item \emph{Welke taal (en evt. framework) zijn de beste keuze om het
programma in te ontwikkelen?}

Het kiezen van een taal is vooral afhankelijk van de beschikbaarheid van zgn.
``libraries'' met multi-touch ondersteuning. Voor
Python\footnote{\url{http://python.org}} bestaat bijvoorbeeld het
applicatieframework Kivy\footnote{\url{http://kivy.org}}.

\item \emph{Hoe werkt de communicatie met de multi-touch tafel?}

Het is nodig om te weten wat voor ``events'' er worden ondersteund door
frameworks als Kivy, om te bepalen welke touch-gebaren kunnen worden
geïmplementeerd.

\item \emph{Welke soorten 3D datasets zijn er en welke daarvan zijn relevant
om te ondersteunen in het Proof of Concept?}

De term ``3D dataset'' is een generieke benaming. Omdat de multi-touch
tafel in het bezit van de UvA is, zal het onderzoek zich in eerste
instantie richten op bestandsformaten die op de UvA worden gebruikt om de kans op
daadwerkelijk gebruik van het programma te vergroten.

\item \emph{Hoe kunnen de verschillende 3D datasets worden gevisualiseerd?}

Is het bijvoorbeeld makkelijk om OpenGL commando's te gebruiken? En wanneer er
vele duizenden vectoren zijn, is het dan nuttig om bijvoorbeeld clusters van
vectoren te groeperen tot een enkele vector?

\item \emph{Hoe kunnen multi-touch gebaren worden gebruikt in de interactie
met 3D datasets?}

Er moet een intuïtieve manier worden ontwikkeld voor de interactie met 3D data
op een 2D scherm.

\item \emph{Wat is een goede structuur die toestaat om in de toekomst nieuwe
visualisatiemethodes toe te voegen?}

Een universeel programma moet flexibel zijn zodat ontwikkelaars gemakkelijk
nieuwe methodes kunnen toevoegen. Een voorbeeld van een al bestaand is
Eclipse. Elk component van Eclipse wordt gezien is een ``plugin''. Zo'n plugin
heeft een vast formaat waardoor het kan worden gebruikt in combinatie met
andere plugins. Een soortgelijke structuur is wellicht nuttig om te hanteren
in het UVA-programma.

De structuur moet flexibel genoeg zijn om een verschillende frameworks te
kunnen gebruiken in verschillende visualisatiemethodes. Kivy maakt
bijvoorbeeld gebruik van een eigen main loop (een functie die zorgt voor het
functioneren van de grafische interface). De loop is ``blocking'', dus is het
mogelijk nodig om gebruik te maken van threads voor continue taken.

\end{itemize}

\subsection{Afbakening}
\label{sec:afbakening}

Het onderzoek zou waarschijnlijk het best tot zijn recht komen wanneer het zou
worden uitgevoerd door meerdere onderzoekers. Omdat er echter slechts een
enkele onderzoeker is, en er een beperkte tijd voor het onderzoek beschikbaar
is, is besloten tot het maken van een Proof of Concept.

%Omdat het UVA-programma expliciet als opdracht is geformuleerd, wordt in dit
%onderzoek aangenomen dat er nog geen universeel programma voor
%datavisualisatie bestaat.

\subsection{Programma-onderdelen}

\emph{- Multitouch-library}

\emph{- front-end in VTK}

\section{Relatie met vergelijkbaar onderzoek}
\label{sec:gerelateerd}

Er is gezocht naar programma's met een soortgelijke strekking met
het doel er inspiratie uit op te doen, zo is het programma ``UDAV'' gevonden.

UDAV\footnote{\url{http://udav.sourceforge.net/}} is een programma waarmee
data op verschillende manieren kan worden gevisualiseerd met behulp van
MathGL\footnote{\url{http://mathgl.sourceforge.net/}}. Om dit programma te
kunnen gebruiken is kennis nodig van de MathGL syntax, waar het UVA-programma
juist als eigenschap heeft dat er weinig kennis nodig is van de gebruiker.
Het zou echter wel een optie zijn om visualisatiemogelijkheden in de MathGL
library onder te brengen in een module voor het UVA-programma.

\section{Onderzoeksmethodiek}
\label{sec:methodiek}

\subsection{Methode}

Het UVA-programma is een nieuw soort programma, er is nog geen bestaande
variant van. Dit onderzoek maakt daarom gebruik van een experimentele
onderzoeksmethode\footnote{\url{http://artikelen.foobie.nl/verslagen-scripties/onderzoeksmethode-samenvatting/}}:
tijdens de ontwikkeling van het programma wordt geëxperimenteerd met de
beschikbare opties voor implementatie, en wordt bepaald in hoeverre deze
opties voldoen aan de vooraf gestelde eisen.

\subsection{Fases}

Het onderzoek kan worden verdeeld in vier hoofdfases:

\subsubsection*{Oriëntatiefase}

De eerste fase is de oriëntatie op het werken met de multi-touch interface, en
op het weergeven van voorbeeld-datasets in 3D (gebruik makend van de OpenGL-
bindings\footnote{\url{http://kivy.org/docs/api-kivy.graphics.opengl.html}} in
Kivy).

Er moet bijvoorbeeld worden uitgezocht welke touch-gebaren worden herkend. Dit
kan worden getest met behulp van een testprogramma dat een bericht toont op
het moment dat een event optreedt.

Ook is het nuttig om een testprogramma te maken dat met behulp van de eerder
genoemde OpenGL-bindings een 3D plot maakt van een voorbeeld-dataset, om
bekend te worden met de OpenGL functionaliteit.

Daarnaast moet worden bepaald welke soorten 3D data gaan worden gebruikt, en
hoe het formaat hiervan eruit ziet.

\subsubsection*{Ontwerpfase}

Met de kennis die is opgedaan tijdens de oriëntatiefase kan een ontwerp worden
gemaakt van het kerncomponent van het programma, en de aansluiting hiervan op
de 3D/multi-touch visualisatiecomponenten.

\subsubsection*{Implementatiefase}

Deze fase bevat het daadwerkelijk programmeren van de ontworpen onderdelen.
Tijdens deze fase zullen ook ontwerpproblemen op een gedetailleerd niveau
worden opgelost. Denk aan het invullen van de grafische interface met knoppen
en eventuele widgets.

\subsubsection*{Verslaglegging}

Het is de bedoeling dat al tijdens de eerste drie fases wordt gewerkt aan de
basis van de afstudeerscriptie. Tijdens die fases kunnen een aantal deelvragen
worden beantwoord.
Er zal een logboek worden bijgehouden in de vorm van Version Control. Het
gebruikte Version Control systeem is Git\footnote{\url{http://git-scm.com/}}.
Bij de ``commits'' worden ``commit messages'' ingevuld zodat zichtbaar is op
welk moment (in welke commit) bepaalde taken zijn uitgevoerd.

Tijdens de laatste fase worden de antwoorden op de deelvragen waar nodig
aangevuld, en worden de overige hoofdstukken geschreven.

\section{Het TUIO-protocol}

\emph{- Vertellen dat het op een UDP poort binnenkomt}\\
\emph{- wat komt er dan binnen?}\\
\emph{- wat doet de implementatie ermee?}

\section{Multitouch-library}

\subsection{Threads}

\emph{- Meerdere threads nodig omdat er 3 loops zijn}\\
\emph{- Daemon threads voor stabiliteit}

\subsection{Gebaarherkenning}

\subsubsection*{Rotatie}

\emph{- Tangens-vergelijking voor rotatie om centroid}

\subsubsection*{``Pinch''}

\emph{- Relatief verschil in afstand tot centroid}

\subsubsection*{Slepen met meerdere vingers}

\emph{- meerdere vingers in dezelfde richting genereert drag event met beweging van
centroid}

\subsection{Afvuren ``event''}

\emph{- Event binding uitleggen}\\
\emph{- Waarom deze manier handig is}\\
\emph{- Eventueel: beschrijven welk design pattern dit is}

\subsection{Toewijzing aan ``event window''}

\emph{- TUIO coördinaten zijn over het hele scherm en van 0.0 tot 1.0, dus moeten worden vertaald naar pixelcoördinaten binnen een ``window''.}

\section{Experimenten}

\emph{- draw.py}\\
\emph{- UVA front-end}

\section{Conclusies}



\section{Referenties}

\begin{itemize}
\item Homepage Robert Belleman \url{http://staff.science.uva.nl/~robbel/}
\item Python homepage \url{http://python.org}
\item Definitie experimentele onderzoeksmethode \url{http://artikelen.foobie.nl/verslagen-scripties/onderzoeksmethode-samenvatting/}
\item Kivy homepage \url{http://kivy.org}
\item Kivy OpenGL-bindings documentatie \url{http://kivy.org/docs/api-kivy.graphics.opengl.html}
\item Git homepage \url{http://git-scm.com/}
\item UDAV homepage \url{http://udav.sourceforge.net/}
\item MathGL homepage \url{http://mathgl.sourceforge.net/}
\end{itemize}

\end{document}
