1
2
“Je moet schieten, anders kun je niet scoren.” Johan Cruijff Nederlands voetballer en coach 1947
3
Inhoudsopgave Algemene inleiding .............................................................................................................................. 6 Overzicht onderzoek ........................................................................................................................... 7 Hoofdstuk 1: Veldonderzoek......................................................................................................... 8 Schietproef 1 – oriënterend ................................................................................................................ 8 Beelden ............................................................................................................................................ 8 Conclusie ....................................................................................................................................... 10 Schietproef 2 - verdiepend ................................................................................................................ 10 Opstelling....................................................................................................................................... 10 Conclusie ....................................................................................................................................... 11 Schietproef 3 - definitief.................................................................................................................... 11 Uitvoering en conclusie ................................................................................................................. 12 Schottechniek (á la Beckham) ....................................................................................................... 13 Hoofdstuk 2: Puntreconstructie .................................................................................................. 14 Het beeldvlak ................................................................................................................................. 14 Van pixelcoördinaten naar vectoren ............................................................................................. 15 Uit twee vectoren de plaats van de bal reconstrueren..................................................................... 17 Hoofdstuk 3: Beeldonderzoek ..................................................................................................... 20 Adobe After Effects ....................................................................................................................... 20 Microsoft Excel .............................................................................................................................. 21 Van Excel naar MATLAB................................................................................................................. 22 Beeldcorrectie ................................................................................................................................... 22 Hoofdstuk 4: Balbaanreconstructie ............................................................................................. 26 De kleinste-kwadratenmethode........................................................................................................ 26 Lineaire Regressie .............................................................................................................................. 28 Onze balbanen............................................................................................................................... 30 Hoofdstuk 5: Rotatie, snelheid en curve ...................................................................................... 32 Rotatie ........................................................................................................................................... 32 Basistransformatie ........................................................................................................................ 36 Snelheid van de bal........................................................................................................................ 38 Curve.............................................................................................................................................. 39 Correlatie ....................................................................................................................................... 40 Hoofdstuk 6: Resultaten ............................................................................................................. 41 Interpretatie resultaten................................................................................................................. 44 4
Hoofdstuk 7: Conclusie en discussie ............................................................................................ 46 Betrouwbaarheid resultaten ............................................................................................................. 46 Controle van balbaan .................................................................................................................... 46 Draaiing bal.................................................................................................................................... 47 Verbetering rotatie ........................................................................................................................ 47 Verband tussen rotatie, snelheid en curve ................................................................................... 48 Vervolg onderzoek............................................................................................................................. 49 Toepassingen ................................................................................................................................. 49 Volledige automatisering .................................................................................................................. 50 Op het veld ........................................................................................................................................ 50 Algemene Conclusie .......................................................................................................................... 51 Nawoord ............................................................................................................................................ 52 Referenties ................................................................................................................................ 53 Bijlages ...................................................................................................................................... 55 Bijlage 1: Matlab programma ............................................................................................................ 55 Bijlage 2: De opstelling ...................................................................................................................... 59 Bijlage 3: De correlatie-tabellen ..................................................................................................... 61 Bijlage 4: Controle voorspelling...................................................................................................... 64 Bijlage 5: Betrouwbaarheid balbaan .............................................................................................. 65
5
Algemene inleiding ‘Bend it like Beckham’ is een Britse film, geproduceerd in 2002. Het verhaal volgt een meisje uit een traditioneel orthodox gezin waarin zij rebelleert door stiekem te gaan voetballen. Dit verhaal interesseert ons vrij weinig. Het gaat ons om het begrip: ‘Bend it like Beckham’. David Beckham is namelijk een voetbalicoon, bekend om zijn grandioze schottechniek. Zonder nadenken legde hij in zijn beste jaren de bal neer waar hij ook maar wilde, met zijn vrije trap als specialiteit. Zijn balgevoel heeft ons mede geïnspireerd dit profielwerkstuk te schrijven. Maar Beckham heeft iets gehad wat wij niet hebben: jarenlange training. Niemand wordt van de ene op de andere dag geweldig in een bepaalde sport, ook Beckham niet. Helaas hebben wij de tijd niet om elke dag op het voetbalveld te staan, oefenend op onze schottechniek. Kunnen we die tijd inkorten? In de zesde eeuw voor Christus deed Pythagoras de uitspraak: ‘’Alles is te verklaren met wiskunde.’’ Deze bewering is van invloed geweest op de denkwijzen van latere denkers zoals Plato en Aristoteles, en zelfs nog latere denkers als Leibniz en Kant. Pythagoras probeerde de wereld en het heelal te vatten in getallen. Alle ‘dingen’ zijn getallen en alle elementen van die ‘dingen’ zijn ook getallen. Goede getalsverhoudingen leveren harmonie op. En dit geldt op allerlei gebieden, denk aan muziek, religie en kosmos. Maar als alles met de wiskunde te verklaren is, zou dit dan ook een oplossing kunnen zijn voor ons probleem? Voetbal en wiskunde hebben zich al vaker in combinatie voorgedaan. Zowel binnen als buiten het veld zijn er veel wiskundig verklaarbare aspecten. Buiten het veld gaat dit vooral over kansberekeningen. Aan de hand van data is veel binnen het voetbal te voorspellen, maar lang niet alles. Hoe groot is de kans dat het ene team het andere verslaat? In welke hoek moet de spits zijn penalty schieten om garantie te hebben op een doelpunt? Hebben we een goede hoop op het halen van de finale op het WK? Door gokbedrijven gaan er tegenwoordig miljoenen om in iets wat eigenlijk maar een spelletje is. Er vindt tegenwoordig zelfs matchfixing plaats, wat nog lastiger in regels gegoten kan worden. Of moeten we de kans op matchfixing berekenen? Maar ook op het veld is er veel wiskundig benaderbaar. Zo wordt er veel onderzoek gedaan naar verschillende aspecten binnen het veld om het spel zelf te perfectioneren. De lengte van het gras, de textuur van de tenues, de vorm van de schoenen, alles heeft zijn invloed op het spel. Wat echter het belangrijkste blijft is hoe je de bal moet trappen. David Beckhams vrije trappen stonden altijd bol van het effect. Hij wist als geen ander hoe hij dat moest doen, de bal langs een muurtje krullen. Dit onderzoek is gericht op zijn specialiteit: de curve. De vraag die we proberen te beantwoorden is dan ook: Wat is het wiskundige verband tussen de rotatie en snelheid van een bal en de curve die de bal in zijn baan ondervindt? We laten in dit onderzoek de natuurkundige elementen achterwege. Er wordt enkel vanuit de wiskunde naar de beweging van de bal gekeken, zodat zaken als zwaartekracht, wind en de opwarming van de bal niet aan bod komen. Dit betekent niet dat we doen alsof deze zaken er niet zijn; we kijken echter of het mogelijk is dit onderzoek uit te voeren met enkel gebruik van wiskunde en empirisch onderzoek. Onze verwachtingen waren hoopvol, doch realistisch. We vermoedden een flinke kluif te zullen krijgen aan met name de wiskunde, maar zagen dit ook als een uitdaging. Of de kennis na het onderzoek ook in het veld zijn voordelen zal hebben, verklappen we nog niet. 6
Overzicht onderzoek Dit stuk is bedoeld om uit te leggen hoe het onderzoek beschreven zal worden. Het profielwerkstuk bestaat uit meerdere onderdelen waarbij elk onderdeel een aantal moeilijkheden kent. Het is een uitdaging geweest om altijd naar de beste oplossing voor elk probleem te zoeken. Soms is dat eenvoudig, vaak gaat er een lang denkproces aan vooraf. Een groot gedeelte van ons onderzoek bestond uit zoeken naar meetmethodes die met de wiskunde te combineren zijn tot goede resultaten. Ten eerste is er het praktische gedeelte: veldonderzoek. Dit wordt als eerste behandeld in dit profielwerkstuk. Het veldonderzoek bestaat uit drie delen; elk deel beschrijft een moment waarop met bal en camera’s aan de slag is gegaan, waarbij telkens gerichter te werk wordt gegaan. Daarna volgt er een theoretisch deel. Deze onderdelen bevatten wiskundige theorie die per onderdeel van toepassing zijn. Als eerste komt het hoofdstuk ‘Puntreconstructie’. In dit hoofdstuk wordt theoretisch beschreven hoe de afzonderlijke punten gevonden zijn waar de bal langs is gegaan in zijn baan richting het doel. Na het hoofdstuk ‘Puntreconstructie’ komt een hoofdstuk ‘Beeldonderzoek’. Hierin wordt duidelijk hoe de beelden uit het veldonderzoek zijn geanalyseerd met programma’s op de computer. Hierna volgt het hoofdstuk ‘Balbaanreconstructie’. In dit hoofdstuk wordt uitgelegd hoe aan de hand van de afzonderlijke punten in de balbaan de volledige balbaan is berekend. Na ‘Balbaanreconstructie’ komen we aan bij het hoofdstuk ‘Rotatie, snelheid en curve’. Hierin wordt verteld hoe wij de curve, rotatie en snelheid van de bal hebben bepaald. Daarna volgen onze resultaten en de interpretatie hiervan het hoofdstuk ‘Resultaten’. De resultaten laten de gevonden verbanden zien, die we bespreken in conclusies. Daarnaast wordt het gehele onderzoek nog uitgebreid bediscussieerd. Dit gebeurd in het hoofdstuk ‘Conclusie en Discussie’. Omdat we voor deze opzet kiezen, wordt er soms verwezen naar een stuk tekst dat verderop in de tekst staat. Ook geven wij onze visie op de waarde van dit onderzoek, de betrouwbaarheid en mogelijke vervolgonderzoeken. Als laatste volgen de bijlages. Deze bijlages kunnen interessant zijn om te lezen maar zijn niet noodzakelijk voor het begrijpen van het onderzoek. De bijlages dienen hoofdzakelijk als verdere toelichting bij een aantal stukken.
7
Hoofdstuk 1: Veldonderzoek Schietproef 1 – oriënterend De eerste schietproef is gedaan met als doel een goed beeld te krijgen van wat de mogelijkheden zijn van de camera’s die gebruikt worden. Met twee camera’s, een voetbalveld, een bal, pionnen en onszelf als schutters zijn we aan de slag gegaan. Als locatie is gekozen voor voetbalclub Geuzen-Middenmeer in Amsterdam Oost. Bij deze test is er zoveel mogelijk gevarieerd op verschillende punten. Zo zijn de standpunten van de camera’s meerdere keren veranderd en is de beginpositie van de bal telkens anders. Wat vooraf wel bekend is, is dat één camera (C1) richting het doel zou filmen en één camera (C2), een kwartslag gedraaid, vanaf zijaanzicht van het doel. De bal is hard en zacht, hoog en laag, met en zonder curve op doel geschoten. De gedraaide beelden zijn vervolgens op de computer onderzocht met het programma Adobe After Effects dat de positie van de bal op het tweedimensionale beeldvlak achterhaalt voor wiskundige anayes (zie hoofdstuk 3 - ‘Beeldonderzoek’).
Beelden Hier volgen een aantal screenshots van geschoten beelden.
Afbeelding 1 – Screenshot van camera 1
8
Afbeelding 2 – Screenshot van camera 2
Afbeelding 3 - Screenshot van camera 2
9
Conclusie We hebben een goed idee gekregen van de camera’s en zijn tevreden met de kwaliteit van de beelden. De screenshots zijn er slechts drie uit ongeveer een half uur aan filmmateriaal. Deze beelden hebben we aandachtig bekeken met het programma ‘Adobe After Effects’ en we zijn tot een aantal conclusies gekomen hoe we de schietproef konden verbeteren. (zie hoofdstuk 3 – Beeldonderzoek). We hebben gekozen voor een vast beginpunt van de bal. Namelijk het punt waar de halve cirkel om de penaltystip de zestienmeterlijn snijdt, aan de linkerkant, naar het doel gekeken. Dit punt is namelijk altijd makkelijk terug te vinden en bovendien ligt het beginpunt zo voor beide camera’s links in beeld.
Schietproef 2 - verdiepend In dit stuk wordt de meting beschreven waarin schoten nauwkeurig beschouwd worden. In deze meting is er zo’n twintig keer geschoten. Er zijn een aantal wijzigingen doorgevoerd die later worden besproken. Het is voor het onderzoek belangrijk te weten welke materialen we allemaal tot onze beschikking hebben. Om verschillende metingen betrouwbaar te kunnen vergelijken is het belangrijk dat we telkens dezelfde materialen gebruiken. Daarom filmen we altijd met dezelfde camera’s: Canon Legria HF M46. Deze camera’s filmen in HD en gebruikten we ook al in de eerste schietproef. Ook is het van belang dat de bal waarmee we schieten altijd dezelfde is. Elke bal is namelijk net anders van materiaal, vorm, hardheid, etc. We kiezen ervoor om met een bal te schieten die ook in het professionele voetbal wordt gebruikt, namelijk in de Nederlandse Eredivisie. In deze competitie wordt al jaren gespeeld met een bal van het merk Derbystar. Door met een professionele bal te schieten zullen we geen onrealistische balbanen krijgen die wel mogelijk zijn met voetballen die bijvoorbeeld te licht of te klein zijn.
Opstelling De camera’s die de baan van de bal filmen staan nu loodrecht op elkaar afgesteld, dus op de middens van twee zijden van een vierkant, loodrecht op elkaar. Op deze manier kunnen de punten in de ruimte het best berekend worden. Bij deze meting zijn twee extra camera’s gericht op de bal. In deze proef wordt namelijk niet alleen de balbaan gemeten. We filmen ook de bal zelf, hoe deze geschoten wordt, zodat we later het verband kunnen Afbeelding 4 leggen tussen hoe de bal geraakt wordt en welke balbaan het desbetreffend schot volgt. Hiervoor moeten we dus precies beschouwen op welke manier de bal 10
geraakt wordt. Hierin zijn het raakpunt op de bal, de kracht waarmee de bal wordt geraakt, en de richting van deze kracht belangrijk. Hoe deze precies met elkaar verbonden zijn, wordt later uitgezocht. De opstelling van deze camera’s is in afbeelding 4 schematisch weergegeven; Hier is te zien op welke posities de camera’s (C3 en C4) zich ten opzichte van het beginpunt van de bal (B) bevinden.
Conclusie De beelden van de balbaan (camera 1 en 2) zijn zeer bruikbaar. De opstelling van deze camera’s zal dan ook voor het grootste deel onveranderd blijven. De beelden van het raken van de bal zijn van goede kwaliteit, maar de actie is te snel om duidelijk te kunnen onderzoeken. Het is dus geen optie meer om hier onderzoek naar te doen aangezien onze camera’s ontoereikend zijn.
Schietproef 3 - definitief De derde en laatste schietproef is gericht op de rotatie en de curve van de bal. De cameraopstelling is voor een deel hetzelfde en voor een deel aangepast. De twee camera’s die dicht op de bal stonden geplaatst bij schietproef 2 zijn er in deze proef niet. Wel is een extra camera aanwezig die de bal in zijn volledige baan van dichtbij volgt. Deze camera is, in tegenstelling tot alle andere camera’s die tot nu toe gebruikt zijn, in beweging tijdens een schot. Bij deze proef ligt niet de aandacht op hoe de bal geraakt wordt. Dit staat nu volledig buiten beschouwing. De rotatie van de bal staat nu centraal, welke gefilmd wordt door de nieuwe camera 3. Opstelling
Afbeelding 5 - Driedimensionale weergave van het voetbalveld Op afbeelding 5 is een schematische driedimensionale weergave van het voetbalveld te zien. Hierop zijn alle afstanden te zien (gemeten met een meetlint). Dit is heel precies gedaan omdat veel afstanden van belang zijn in de puntreconstructie en kleine afwijkingen hier kunnen zorgen voor ongewenste afwijkingen in de uiteindelijke balbaan. Ook de precieze posities van de camera 1 en camera 2 zijn hier weergegeven. De positie van camera 3 is niet aangegeven, omdat deze geen vaste positie had. 11
Camera 1 en camera 2 zijn dezelfde camera’s als in schietproef 1 en 2 zijn gebruikt. Camera 3 is is een Sony HDR CX740VE. Deze filmt in een hogere resolutie, kan met een kleinere sluitertijd filmen en heeft bovendien een stabiliseringmechanisme. Het laatste is zeer gunstig voor het volgen van de bal, omdat het zorgt dat de beelden vloeiend (zonder schokken) zijn. Verder is de bal nu voorzien van zes gekleurde vlakken. Deze zijn ervoor bedoeld de rotatie van de bal duidelijk weete kunnen meten. We kiezen voor een nieuwe denkbeeldige oorsprong precies in het middelpunt van de bal. Dit is de oorsprong van een nieuw driedimensionaal assenstelsel. Elk van deze assen verlaat de bal aan twee verschillende kanten van de oorsprong. Op de twee punten waar een as dit doet zijn twee stippen van dezelfde kleur. Dat betekent dat alle stippen precies even ver van elkaar verwijderd zijn (behalve tegenoverliggende stippen) en de verschillende Afbeelding 6
kleuren in dit assenstelsel loodrecht op elkaar staan. Zie afbeelding 6 voor een afbeelding van de gebruikte bal.
Uitvoering en conclusie Er is weer een twintigtal schoten gedaan, afwijkend in snelheid en richting. De rotatie van de bal filmen gebeurde met de camera in de hand, wat goed te doen was. Dit is vanuit meerdere posities gedaan, omdat de perfecte positie nog niet bekend was. Op de beelden is gebleken dat dit voor het meten van de rotatie niet heel veel uitmaakt.
Afbeelding 7 - Screenshot van camera 3 De rotatie is erg goed te zien. We zijn vooral zeer tevreden met de kwaliteit van de beelden. De bal is in elke frame scherp (de stippen zijn duidelijk zichtbaar), wat ervoor zorgt dat de snelheid en de richting van de rotatie goed te zien zijn.
12
Wel is een fout opgetreden in de draaiing van camera 2. Uit de beelden is gebleken dat deze camera een aantal graden naar rechts gedraaid stond, waardoor deze camera niet loodrecht op de y-as filmde. Dit zorgt ervoor dat de pixelcoördinaten niet overeenkomen met waar vanuit wordt gegaan in de berekeningen, wat leidt tot foute balbanen (zie hoofdstuk 3 – ‘Beeldonderzoek’ voor het herstel van deze fout). Maar zoals Cruijff placht te zeggen: ‘Ieder nadeel heb zijn voordeel’. Door het corrigeren van deze fout konden we onze techniek uitbreiden. Dit heeft enkele interessante resultaten en methodes opgeleverd welke behandeld worden in het hoofdstuk Beeldonderzoek.
Schottechniek (á la Beckham) Om voor ons de metingen iets makkelijker te maken beperken we ons tot slechts één schottechniek. Dit profielwerkstuk heet niet voor niets ‘Bend it like Beckham’. Wanneer je alle vrije trappen van David Beckham vergelijkt, valt op dat elk schot op ongeveer dezelfde manier wordt geschoten. Elke keer begint hij zijn aanloop op ongeveer vier meter afstand van de bal, met een hoek van ongeveer 45 graden. Bij de bal aangekomen schiet Beckham altijd met rechts, raakt de bal met de wreef aan de binnenkant van zijn voet. De bal begint zijn beweging, en heeft een afbuiging naar links. Wij kennen deze techniek en weten deze uit te voeren.
13
Hoofdstuk 2: Puntreconstructie Voor het succesvol reconstrueren van een balbaan in drie dimensies is het noodzakelijk dat er genoeg punten uit de baan bekend zijn. Waar deze punten in de ruimte liggen, wat dus de x,y- en z-coördinaten van de punten zijn, moet worden berekend aan de hand van twee zelfgeschoten camerabeelden. Een camerabeeld is tweedimensionaal. Om van één punt de coördinaten precies te bepalen, moeten de posities van de camera’s goed op elkaar afgesteld zijn. Om vervolgens uit de twee geschoten beelden één punt in drie dimensies te beschrijven, is de wiskunde van belang. Per schot zullen we frame per frame kijken waar de bal zich op beide beelden bevindt en uit deze twee beelden de driedimensionale plaats reconstrueren.
Het beeldvlak Het beeld dat een camera weergeeft zien we als een vlak. De positie van de bal (punt P) kan worden gezien als een vectorrichting vanuit de camera, door het beeldvlak, naar het werkelijke punt. De afstand tussen de bal en de camera is onbekend en is met één camerabeeld niet te bepalen. Bekend is waar de vector het beeldvlak snijdt (punt P1). Dit punt is namelijk precies P zoals je hem ziet in het beeldscherm. Wat je nu weet is dat de positie van de bal op de richting van deze vector ligt, onbekend is nog waar op deze vector. Daarvoor is de tweede camera. Als de tweede camera op dezelfde manier beschouwd wordt, ontstaat er weer een beeldvlak met een snijpunt (punt P2) van de vector van deze camera naar P. Nu zijn twee vectoren bekend waarop dit punt ligt, met verschillende richtingen. Punt P is dan het snijpunt van de rechten door C1, P1 en C2, P2. (Zie afbeelding 8).
Afbeelding 8 Het berekenen van de locatie van dit punt P in de lucht bestaat uit verschillende stappen. De eerste stap hiervoor is weten wat de verhoudingen binnen het vlak zijn. Deze positie wordt uitgedrukt in pixelcoördinaten. Deze pixelcoördinaten die After Effects geeft moeten vervolgens nog omgezet worden in vectoren.
14
Van pixelcoördinaten naar vectoren Om de getallen die we binnen krijgen van After Effects in vectoren om te zetten moet eerst bekend zijn waar ons beeldvlak ligt. Het beeldvlak kun je voor je zien als de afdruk van een foto. Deze afdruk kan enkel op één afstand van de camera gehouden worden, zodat de foto perfect overgaat in de omgeving. Als je de foto een klein beetje naar voren of naar achteren verplaatst, merk je dat hij niet meer perfect in het landschap opgaat. De afstand waarop je de foto moet neerzetten is afhankelijk van de grootte van de afdruk van de foto. Wat gelijk blijft is de verhouding tussen de afstand (d), en de grootte van de afdruk/het beeldvlak (b). Je kan dit zien door naar de voorstelling te kijken als naar gelijkvormige driehoeken. In dit geval geldt:
=C
waarbij b en d de originele afbeelding en afstand zijn, b1 en d1 de eerste afdruk, en b2 en b3 alle mogelijke variaties van afdrukken zijn (zie afbeelding 9). Deze verhouding levert een constante C op. C drukt de verhouding uit tussen de afstand van het beeldvlak en de grootte van dit beeldvlak. Om ons eigen beeldvlak te vinden zetten we zelf twee voorwerpen op een gekozen afstand van elkaar en op een gekozen afstand van de camera. Deze afstand en verhouding zijn gemeten met pionnen. Hiervoor geldt dat: Afbeelding 9
En hieruit volgt:
De eenheid van de afstand van de pionnen op het beeld is pixels en kan door After Effects gegeven worden. Zo worden dus de afstanden tot en binnen het beeldvlak achterhaald. De laatstgenoemde afstand is echter in pixels. In ons geval maakt het niet uit hoe groot één pixel precies is, omdat dit zelf gekozen mag worden. Want zoals er eerder al aangetoond is, gaat het om de verhouding tussen de grootte van het beeldvlak en de grootte van de afstand van dit beeldvlak tot de camera. Het maakt dus niet uit of deze verhouding in pixels of in meters is, want voor beiden blijft de verhouding hetzelfde. In ons geval kwamen wij voor de beeldvlakafstand op een afstand van 1692.36 pixels. Bij ons geldt dus dat 1440 staat tot 1692,36.
Nu mogen wij zelf bepalen hoe groot wij een pixel maken en op welke afstand wij dit beeldvlak plaatsen maar daarbij blijft deze verhouding geldig. Als wij bijvoorbeeld ons beeldvlak op een afstand van 5 meter van de camera zetten moet het beeldvlak breed zijn. Nu is ook gelijk de hoogte van het beeldvlak bekend. Dat is 15
m Dit zijn de totale breedte en hoogte van het beeldvlak. Wij hebben de afstand zo gedefiniëerd dat deze loodrecht op het midden van het beeldvlak staat dus beide waardes zullen door 2 gedeeld worden waarna de ene helft de positieve as vormt van het assentelsel in het beeldvlak en de andere helft de negatieve helft van de as. Onze uiteindelijke rechte richting de bal krijgt zo de vorm van de volgende parametervergelijking: ̅
( )
( )
is in deze vergelijking de parameter. Wat we als oorsprong kiezen hebben we ook zelf in de hand en daarom zijn we vrij een voor ons gunstig punt te nemen. Zoals gezegd staan de camera’s loodrecht op elkaar, dus de lijnen waar deze camera’s op staan hebben wij als onze x en y-as gekozen. Camera 1 staat op de y-as, camera 2 op de x-as. Dan is er nog de hoogte, die loodrecht op beide assen staat en deze vormt onze z-as. Als eenheid voor de lengte is gekozen voor meters. De positie van de camera’s in de ruimte is bekend. We weten namelijk waar deze staan ten opzichte van de oorsprong en kunnen dit eenvoudig met een meetlint meten. Deze posities zien we als steunvectoren vanuit de oorsprong. Vanuit deze punten in de ruimte lopen dan nog de richtingsvectoren naar de bal. De vecotrvergelijkingen van rechten die we moeten snijden ziet er dan als volgt uit: ̅
( )
( ) en ̅
( )
( )
Steunvector 1 ( ) wordt gegeven door de positie van camera 1, en vector 1:
( ) wordt
gegeven door de vector die vanuit camera 1, door de afbeelding van de bal op het beeldvlak, naar de bal gaat. Voor camera 2 geldt hetzelfde principe. Zoals te zien is heeft de steunvector van vector 1 (horend bij camera 1) een x-waarde van 0. Dit is zo omdat de camera zich bevindt op het vlak dat wordt opgespannen door de y- en de z-as. Hetzelfde geldt voor vector 2 (bij camera twee), maar dan zijn de x- en y-waarde omgedraaid. De waarden van x0, y0, z0 zijn handmatig met meetlinten gemeten. Zie hoofdstuk 3 – ‘Beeldonderzoek’ voor de precieze methode waarmee de vectoren richting de bal zijn bepaald.
16
Uit twee vectoren de plaats van de bal reconstrueren Vanaf nu wordt er gewerkt met de volgende vectorvergelijkingen: ̅
( )
( ) en ̅
( )
( )
̅ is de vector vanaf de camera op de x-as richting de bal en ̅ de vector vanaf de camera op de y-as. Het zou te verwachten zijn dat de driedimensionale plaats gegeven wordt door het snijpunt van beide vectoren. Dan zou de oplossing gegeven worden door de vectoren gelijk aan elkaar te stellen. ̅
( )
( )= ̅
( )
( ).
Dit geldt weliswaar in theorie, maar niet in praktijk. De twee vectoren zullen namelijk vrijwel nooit exact snijden. Dit komt doordat er altijd meetfouten zullen zijn in de gegevens. Het maakt niet uit hoe klein deze meetfouten zijn, al is het een duizendste van een millimeter, ze zullen er onherroepelijk voor zorgen dat de rechten niet snijden. We kunnen deze methode dus niet gebruiken om de coördinaten te vinden van het punt waarop de bal zich bevindt. Wat we in plaats daarvan zullen moeten doen is het punt vinden dat het dichtst bij beide lijnen ligt. Dit punt zal dan als locatie van de bal beschouwd worden aangezien het de beste benadering is. Om alle parameters (x,y,z) even zwaar mee te laten wegen moet het punt worden gevonden waar de afstand tot beide vectoren( ̅ ̅ ) minimaal is. Dit is het punt dat halverwege de vector ligt die de kortste afstand tussen de rechten overbrugt. Hiervoor moet dus eerst de rechte bekend zijn die de kortste afstand tussen de twee vectoren overbrugt. We zijn nu zover dat we twee rechten(P1,P2 en P3,P4) hebben die beide door het punt gaan waar de bal zou moeten zijn. Vanaf nu zullen we deze twee als lijn1 en lijn2 definiëren, waarbij lijn 1 de lijn is die gevormd wordt door de vector met de camera op de x-as als vertrekpunt en lijn 2 wordt gevormd door de vector die bij de camera op de y-as begint. Afbeelding 10 Lijn1 en lijn 2 zijn in principe oneindig lang. We kiezen de lijnen echter zo lang dat we zeker weten dat de kortst mogelijke lijn tussen lijn 1 en lijn 2 zich binnen de door ons gekozen lengte bevindt. Vervolgens beschrijven we onze lijnen elk door 2 punten te kiezen, het begin en het eindpunt van de lijn. Voor lijn1 zijn dit P1 en P2, voor lijn 2 zijn dit P3 en P4. Deze punten liggen uiteraard op de al eerder gevonden vectoren. Onze gezochte kortste lijn tussen lijn 1 en lijn 2 loopt tussen 2 punten. Eén punt op lijn 1, punt Pa en één punt op lijn2, punt Pb. We weten van Pa dat het zich bevindt tussen P1 en P2 waarbij 17
). Op dezelfde manier kan je een punt op de tweede vector beschrijven, die gegeven wordt door de punten P3 en P4.
Voor de punten die tussen P1-P2 en P3-P4 liggen, zijn de waardes van a en b tussen de 0 en 1. Dit geldt voor de punten waar wij naar opzoek zijn. Het lijnstuk van Pa naar Pb zullen we vanaf nu lijnstuk c noemen. Ons doel is dus het vinden van c. Er zijn twee manieren om de benadering van de kortste afstand op te lossen. Eén manier is het minimaliseren van de grootte van het lijnstuk c. Deze methode zullen wij echter niet behandelen. Wij zullen ons focussen op een andere benadering. Op afbeelding 11 zien we twee rechte hoeken. Dit komt doordat het kortste lijnstuk tussen de twee lijnen loodrecht op beide lijnen moet staan. Anders kan het niet de kortste afstand zijn en wel om de volgende reden: Afbeelding 11 als de hoek niet recht is, kun je dit punt Pa altijd een klein beetje opschuiven waardoor hij dichterbij 90 graden komt, en als je dit lang genoeg doet volgt altijd een rechte hoek. Uit de Stelling van Pythagoras volgt immers dat de kortste afstand wel de afstand moet zijn waarbij de lijn op beide andere lijnen een rechte hoek maakt. Op de afbeeldingen zie je twee mogelijke Pa’s. Bij de rechter Pa is de afstand tot Pb gegeven door C, bij de rechter Pa door B. Uit Pythagoras volgt dat C gegeven wordt door . C is dus op √ 2 zijn kleinst als A gelijk is aan 0. Dat betekent dat A=0 en dat de Pa dus loodrecht op Pb staat. Ditzelfde geldt voor Pb. ̅ ̅
| ̅|| ̅ |
De cosinus van 90° is 0, dus het inproduct moet gelijk zijn aan nul. Uit deze redenatie volgt dat het inproduct van lijn a en lijnstuk c nul moet zijn, net als het inproduct van lijn b en lijnstuk c. Het inproduct van twee vectoren wordt gegeven door Dit geeft ons de volgende vergelijkingen:
Als we hier nu de formules van onze lijnen invoegen krijgen we: (
) (
)
Als we dit uitwerken naar (x,y,z) zien we: 18
(x1 – x3)(x2 – x1) + (y1 – y3)(y2 – y1) + (z1 – z3)(z2 – z1) + a((x2 b((x4
– x1)(x2 – x1) + (y2 – y1)(y2 – y1) + (z2 – z1)(z2 – z1)) –
– x3)(x2 – x1) + (y4 – y3)(y2 – y1) + (z4 – z3)(z2 – z1)) = 0
En: (x1 – x3)(x4 – x3) + (y1 – y3)(y4 – y3) + (z1 – z3)(z4 – z3) + a((x4 b((x4
– x3)(x2 – x1) + (y4 – y3)(y2 – y1) + (z4 – z3)(z2 – z1)) –
– x3)(x4 – x3) + (y4 – y3)(y4 – y3) + (z4 – z3)(z4 – z3)) = 0
We definiëren nu dmnop als volgt: (xm - xn)(xo - xp) + (ym - yn)(yo - yp) + (zm - zn)(zo - zp) d1343 wordt dan: (x1 – x3)(x4 – x3) + (y1 – y3)(y4 – y3) + (z1 – z3)(z4 – z3) en als we dit toepassen dan zien onze formules eruit als: d1321 +
a
d2121 -
b
d4321 = 0
d1343 +
a
d4321 -
b
d4343 = 0
Als we nu substitutie toepassen door a
b
te schrijven als een functie van
a
krijgen we:
= ( d1343 d4321 - d1321 d4343 ) / ( d2121 d4343 - d4321 d4321 )
Als we nu terug substitueren krijgen we b
= ( d1343 +
a
d4321 ) / d4343
Als we nu onze µa en onze µb invullen in onze eerste formules vinden we Pa en Pb. ). Ons lijnstuk , is dus gevonden. Met dit lijnstuk kunnen we eenvoudig het punt vinden dat wij uiteindelijk als punt voor onze balbaanvergelijking gaan gebruiken. Dit punt kiezen we namelijk door het midden van het lijnstuk te kiezen als dit punt (Pc). Dit vinden we met –
.
De grootte van lijnstuk c zal afhangen van onze meetfouten. Het is natuurlijk de bedoeling dat deze afstand zo klein mogelijk is; dan is de kans dat de metingen nauwkeurig waren het grootst.
19
Hoofdstuk 3: Beeldonderzoek Adobe After Effects De pixelcoördinaten zijn bepaald met behulp van Adobe After Effects. Dit is een monteerprogramma waarmee beelden afgespeeld en bewerkt worden. Het wordt vooral veel gebruikt voor special effects en beeldmanipulatie in films. Voor ons heeft dit programma echter een aantal interessante functies. Allereerst geeft After Effects van elke pixel de bijbehorende pixelcoördinaten. Hierdoor kunnen wij bepalen waar in het beeldvlak de bal zich bevindt. Daarnaast heeft het de functie ‘Motion Tracking’ en dit geeft de mogelijkheid één bepaald object in een filmbeeld te blijven volgen in slow-motion. Bovendien is het in staat de positie van dit object nauwkeurig in pixels weer te geven. Dit voorkomt een hoop onnodig werk, omdat we hiermee het punt waar de bal zich in het beeld bevindt, (let op, dit is niet hetzelfde als waar het punt zich in werkelijkheid bevindt) voor ons kunnen laten berekenen. De positie van de bal kan dus, in plaats van in meters, in pixels worden uitgedrukt. Met deze getallen zullen we dus ook in het vervolg gaan werken.
Afbeelding 9 - Screenshot van camera, bewerkt met 'Motion Tracking' De lijn die in beeld te zien is geeft de baan aan die de bal richting het doel heeft afgelegd. Het programma heeft de positie van de bal met een bepaald tijdsinterval (frame voor frame) telkens aangegeven. Door al deze punten heeft deze vervolgens een lijn getrokken. Elk punt in dit beeld heeft een x- en een y-coördinaat. Het is mogelijk de coördinaten van de punten op de lijn meteen naar Excel te converteren, zodat ze meteen in een tabel zichtbaar zijn. Dit stuk tabel begint op het moment dat de bal wordt geraakt en dus zijn baan begint. Er zijn 25 frames per seconde, dat betekent een tijdsinterval van 0,04 s. Er is besloten om voor het beginpunt t=0 te kiezen.
20
Het hele beeldscherm is in 1440 bij 1080 pixels uitgedrukt. Per pixel is nog tot drie decimalen nauwkeurig de positie te bepalen. Hier is een voorbeeld van pixelcoördinaten van een schot uit schietproef 1. Frame X pixels 1 125,875 2 153,219 3 187,82 4 214,023 5 236,324 6 255,523 7 271,891 Etc. Etc. Tabel 1 - Pixelcoördinaten van schietproef 1
Y pixels 187,977 210,723 233,57 256,301 274,863 289,535 302,367 Etc.
Wat ook van belang is, is dat de beelden van de camera’s die één schot hebben gefilmd precies gelijk lopen in het programma. Dit moet op de milliseconde nauwkeurig gebeuren, omdat anders uit één baan niet dezelfde punten vergeleken worden vanuit twee perspectieven. In dat geval wordt er een andere balbaan berekend dan zoals deze in de werkelijkheid is. After Effects geeft de mogelijkheid twee beelden apart of tegelijk te laten lopen. Zo kunnen eenvoudig twee camerabeelden van bijvoorbeeld camera 1 en 2 gelijk aan elkaar worden gezet op het punt dat de bal wordt geraakt en vanaf hier de beelden synchroon te laten lopen.
Microsoft Excel Deze pixelcoördinaten moeten voor het beeldvlak wel aangepast worden. Omdat er met vectoren gewerkt wordt, stellen we in ons beeldvlak een denkbeeldige oorsprong in het midden van het beeldvlak. Zo wordt het beeldvlak een assenstelsel, met de pixelcoördinaten als x- en ywaarden. After Effects doet dit eigenlijk ook, maar dan ziet het de linkerbovenhoek van het scherm als oorsprong en lopen de coördinaten op voor x van links naar rechts en voor y van boven naar beneden. Dit moet dus omgerekend worden. Hiervoor is Excel geschikt. Met een beetje modelleren zetten we eenvoudig alle gegeven coördinaten om naar een aangepast assenstelsel. Het vlak wordt normaal gesproken verdeeld van 0 tot 1440 x-pixels en 0 tot 1080 y-pixels. In ons assenstelsel lopen de x-pixels van -720 tot 720 en de y-pixels van -540 tot 540. Eerst kopiëren we hiervoor alle coördinaten naar Excel en laten alle x-coördinaten transformeren door:
–
–
–
Nu hebben we de juiste gegevens om de vectoren vanuit de camera’s berekenen.
21
Van Excel naar MATLAB Om nu aan de hand van deze pixelcoördinaten vectoren te berekenen, is een ander programma nodig. Hiervoor wordt gebruik gemaakt van MATLAB. Dit is een technische softwareomgeving, waarin alle berekeningen en bewerkingen gebeuren op basis van vectorrekening. Dit is voor ons erg aantrekkelijk, aangezien wij met vectoren werken. De volgende stap is de excel bestanden importeren in MATLAB, waarmee veel berekeningen sneller en nauwkeuriger gemaakt kunnen worden.
Van MATLAB naar vectoren Als we de positie van de camera als steunvector neerzetten, en de coördinaten van ons punt op het beeldvlak als richtingsvector is dat genoeg. MATLAB ziet dit punt namelijk al als een vector. MATLAB is een programma waarin zelf geprogrammeerd moet worden, om het berekeningen te laten uitvoeren. De steunvector is al bekend, de richting wordt gegeven door de vector door het beeldvlak. We gebruiken Matlab om de eerder uitgelegde berekening uit te laten voeren die het punt vindt dat het dichtstbij beide vectoren ligt. Het script dat deze berekening uitvoert is al eerder uitgeschreven voor Matlab. Dit script hebben wij gebruikt.1 Als input van dit script zijn vier punten nodig. Een lijnstuk wordt gedefinieerd door twee punten en deze vier punten definiëren dus onze al eerder genoemde lijn 1 en lijn 2. Als beginpunt van lijn 1 hebben wij de positie van camera 1 gekozen, en voor lijn 2 de positie van camera 2. Het eindpunt van lijn 1 ligt 50 meter verder op de richtingsvector van camera 1 en het eindpunt van lijn2 ligt 50 meter verder op de richtingsvector van camera 2. Wij hebben het script zo aangepast dat het automatisch deze punten invoert en itereert over het aantal frames. Zo krijgen wij de coördinaten van alle losse punten waar de bal langs is gegaan.
Beeldcorrectie Het probleem met de gekozen opstelling is dat zelfs kleine meetfouten tot ongewenste afwijkingen leiden. Dit is op meerdere manieren tegen gegaan. Eén van deze manieren is een correctie van de camerabeelden na opname. Dit is gedaan door te berekenen waar een bepaald object zich op het beeldvlak zou moeten bevinden, en waar het zich op de opnames daadwerkelijk bevindt. Het verschil hiertussen geeft de fout aan. Als object nemen we de bal, waarvan bekend is waar deze zich bevindt. Om nu te achterhalen waar de bal zich zou moeten bevinden op het beeldvlak wordt de lijn van de camera naar de bal genomen. Deze lijn l wordt verkregen door l= Als we de camera op de y-as als voorbeeld nemen wordt dit: l=
(
)
)=
(
1
(
Cristian Dima: Matlab conversie voor: The shortest line between two lines in 3D http://paulbourke.net/geometry/pointlineplane/linelineintersect.m
22
)
(
)
Deze lijn snijden we met een vlak waarvoor geldt dat het parallel aan ons beeldvlak loopt. Dat houdt voor de camera op de y-as in: alle vlakken waarvoor geldt dat x constant is (deze camera filmt immers loodrecht op de y-as). Bijvoorbeeld het vlak x =1. We hoeven in de vergelijking alleen naar de waarde van x te kijken. Dit geeft ons de volgende vergelijking: Nu vullen we de gevonden in de originele vergelijking in. )=(
(
)
Om nu de coördinaten op ons zelfgekozen beeldvlak te krijgen wordt dit vlak op dezelfde schaal als ons beeldvlak gebracht. We laten de steunvector vanaf nu achterwege aangezien deze verder niet van belang is. Het gaat namelijk alleen om de richting van de lijn die naar de bal toe loopt, en waar deze het beeldvlak snijdt. De coördinaten van het punt waar dit gebeurt worden meegeschaald. Zo is dus te bepalen waar de bal zich, in pixelcoördinaten, zou moeten bevinden op ons beeldvlak. Dit gebeurt door de berekende waarden te vermenigvuldigen met de gegeven afstand van het beeldvlak in pixels. Aangezien deze afstand door de x waarde wordt bepaald, kunnen we dit gelijk doen omdat x in onze huidige vergelijking 1 is. Dit geeft (
)
(
)
De pixelcoördinaten van de locatie van de bal worden door deze richting gegeven. De y-waarde van deze vector geeft het x-pixelcoördinaat en de z-waarde het y-pixelcoördinaat. De plek van de bal zou in ons camera dus de pixelcoördinaten (17,-118) hebben. Door te vergelijken waar de bal is waargenomen op het beeld en waar de bal op het beeld zou moeten zijn, kunnen we de foutmarge inschatten.
Het herstellen van de fout van de camera’s Bij de eerste twee metingen was de fout klein. Toen was de fout te herstellen door de formule aan te passen waarmee we de pixelcoördinaten omzetten in vectoren. Stel dat de formule was: (
)
en er bleek achteraf dat de bal 20 pixels meer naar rechts had moeten liggen, dan was dit te corrigeren door, in plaats van 520, 500 te gebruiken. (
)
Bij de derde meting bleek echter dat één camera een veel grotere afwijking had. Dit was de camera op de y-as. Nu was deze methode niet meer te gebruiken. Ten eerste hebben we uitgezocht hoeveel de camera fout gedraaid stond om de z-as. We hebben bepaald waar de normaal door het midden van het beeldvlak het vlak snijdt dat wordt opgespannen boven de achterlijn van het voetbalveld (x=36,3) als de camera perfect gepositioneerd zou zijn. Aangezien de camera op de y-as staat en de lijn loodrecht de y-as snijdt, is alleen de x-waarde anders tussen ideaal en gefilmd beeld. De coördinaten van het punt a op dit vlak zijn bekend.
23
(
)
Vervolgens bepalen we het snijpunt van de gefilmde normaalvector met hetzelfde vlak. We kijken enkel naar de x-waarde. Hieronder staan de x-pixelwaardes van de linkerpaal, het midden van het beeld en de rechter paal. We weten dat het doel in werkelijkheid 7,45 meter lang is. Dit betekent dat 1140-635=505 pixels overeenkomen met 7,45 meter. Het midden van het beeld ligt op 720 pixels op de x-as.
Afbeelding 10 - een deel van het scherm in Adobe After Effects Het kruisje bij x=720 geeft het midden van het hele beeld aan. De afstand tussen het midden van het beeld en de linkerpaal is m Het verschil tussen de snijpunten van de ideale normaal en de gefilmde normaal met het vlak x=36.3, wordt gegeven door de afstand van de het snijpunt van de ideale normaal tot de linkerpaal op te tellen bij de afstand van de linkerpaal tot het snijpunt van de gefilmde normaal. Dit geeft een afstand van 4.72 meter. Dit geeft ons de volgende figuur.
Afbeelding 11 De tangens wordt gegeven door de overstaande zijde gedeeld door de aanliggende zijde, dus delen we de afstand tussen beide snijpunten (overstaande zijde) en delen deze door de afstand tussen de camera en de x-as en nemen hier de boogtangens van. (
=
)
We weten nu hoeveel onze camera gedraaid stond. Om deze draaiing te herstellen doen we eerst alsof de camera wel goed stond. We stellen de vectoren op volgens de al eerder genoemde formules, maar zodra we onze vectoren hebben draaien we deze 7,4 graden terug, zodat het nu de vectoren zijn die door de gedraaide camera gemeten zijn. Met deze vectoren rekenen we 24
door. Deze draaiing wordt toegepast met behulp van een rotatiematrix. De standaard rotatiematrix (R) voor een rotatie rond de z-as ziet er als volgt uit. [ Wij vullen nu hier onze
]
in. Dit geeft ons de volgende matrix (M): [
]
Dit is de matrix die onze gevonden vectoren naar het goede beeldvlak brengt. Om het omgekeerde te doen nemen we de inverse van onze matrix M. [
]
[
]
Door de richtingen die deze camera geeft met deze matrix(N) te vermenigvuldigen herstellen we de draaiing van de camera.
Afbeelding 12 Deze correctie na afloop van de metingen hebben we ook toegepast op de andere draaiing. Zo zal de camera op de y-as ook een kleine draaiing om de y as als correctie nodig hebben, en via eenzelfde methode hebben we de beelden van de camera op de x-as gecorrigeerd. Voor de draaiing om de y-as hebben we dezelfde methode gebruikt, maar dan met de lat als referentie punt. Dankzij deze methode kunnen meetfouten achteraf altijd nog hersteld worden, als er maar genoeg referentie punten zijn waarvan de exacte positie bekend is. Er kan altijd voor een assenstelsel worden gekozen waarbij één van de camera’s al loodrecht op één as staat. Met deze methode kunnen de beelden van de andere camera zo gemanipuleerd worden dat deze loodrecht op de andere as komen te staan. Dit zorgt ervoor dat onze methode universeel toepasbaar is, mits er genoeg referentie punten zijn en de locatie van beide camera’s bekend is. Ook is het niet noodzakelijk om de opstelling gelijk perfect neer te zetten aangezien dit achteraf te herstellen is. 25
Hoofdstuk 4: Balbaanreconstructie Wanneer we van genoeg punten (in hoofdstuk 2 – ‘Puntreconstructie’ bekend als Pc) uit de baan de coördinaten weten, kan de balbaan gereconstrueerd worden. Dat gebeurt met behulp van onder andere de kleinste-kwadraten methode en lineaire regressie.
De kleinste-kwadratenmethode Wij hebben (tot onze spijt) geen beschikking tot dure high-speed camera’s, lasertechnologie, infraroodcamera’s of Hawk-Eye2 systemen. De camera’s die in ons onderzoek worden gebruikt zijn simpeler en beperkter in de functies. Veel gebeurt handmatig. Zo zal de precieze afstelling van de camera’s altijd enkele centimeters afwijking hebben, wat zijn terugslag heeft op de beelden die de camera’s ons geven. Dit is onvermijdelijk. Deze nauwkeurigheidsfoutjes kun je niet voorkomen, maar je kunt ze wel zo veel mogelijk beperken. Bij het filmen wordt geprobeerd alles zo netjes mogelijk uit te voeren, maar ook in de wiskunde is hier iets aan te doen. Namelijk met de Kleinste-kwadraten-methode en Lineaire Regressie. In eigen woorden zullen we proberen de methodes uit te leggen. Deze methodes zorgen ervoor dat, bij kennis van meerdere punten in een vlak die niet op een perfecte lijn liggen, de rechte kan worden bepaald die hier het best bij past. Deze rechte zal dus niet precies door alle punten gaan. De rechte die hier wordt gezocht is van de vorm: In het vlak bevindt zich een n aantal punten:
De afwijking tussen punt (xi,yi) in het vlak en deze rechte noemen we Afbeelding 16 voor het gemak di. Dit is het verschil tussen de y-waarde van het punt en de y-waarde van de rechte voor xi (let op: de i in dit stuk gaat niet over imaginaire getallen) :
– De gebruikte maat voor de afwijking is de som van de kwadraten van deze verschillen:
– Wat wordt gezocht is, wanneer de punten zijn gegeven, een polynoom met als graad m, door deze punten waarvoor de afwijking minimaal is. Als deze polynoom door alle punten gaat, dan geldt , kunnen we de y-waarden als volgt uitdrukken in x:
2
Het Hawk-Eye systeem is een computersysteem dat wordt gebruikt om balbanen te volgen bij onder andere tennis.
26
…………………………………………. En zodra we dit zien denken we meteen aan matrices. We stellen een matrix M op.
y1
1 x1 1 x1 2 ... x1 m
c0
y2
1 x2 1 x2 2 ... x2 m
c1
...
..
..
..
..
..
...
..
..
..
..
..
yn
1 xn 1 xn 2 ... xn m
=
*
.. .. cm
Simpeler kun je schrijven: . We willen dus dat de afwijking di zo klein mogelijk is. oftewel dat het verschil, , zo dicht mogelijk bij nul ligt. Om dit te achterhalen moeten we een c zoeken die hiervoor zorgt. We zoeken in de functie een a en een b. Daarom ziet deze c er ook uit als een vector, . Wanneer is dit het geval? Als de verschilvector loodrecht staat op de kolomruimte van M. Een kolomruimte ontstaat wanneer de kolommen van een m bij n matrix een deelruimte opspannen van m. Het inproduct moet gelijk zijn aan 0. Dit ziet er als volgt uit:
Met MT wordt in dit geval bedoeld: matrix M, gespiegeld om zijn hoofddiagonaal Voorbeeld: Als matrix A = [
], dan is AT = [
Wanneer we de vergelijking vereenvoudigen:
– Aangezien dit voor elke cT moet gelden volgt:
– 27
]
Nu kiezen we voor de polynoom met m=1. Het gaat immers om een rechte lijn, met waarden a en b om te berekenen voor de lijn met de minste afwijking op van de punten in het vlak. Er geldt:
[
],
[
],
[
Substitutie in MT M c = MT y geeft:
[
] * [
] [ ] = [
] * [ ]
Oftewel
] [ ] = [
[
]= [
[
] ]
Het begint er steeds overzichtelijker uit te zien. Wat overblijft zijn slechts twee stelselvergelijkingen die opgelost moeten worden.
Omgeschreven staat er dan
Lineaire Regressie Om de formule van de lijn daadwerkelijk te vinden, maken we gebruik van Lineaire Regressie. Dit zorgt ervoor dat we een goede formule krijgen waarmee a en b snel te berekenen zijn. Hoe gaan we te werk? Ten eerste moeten we a of b zien weg te werken uit de vergelijkingen, want met twee variabelen willen we liever niet werken. We nemen hiervoor de eerste van de twee overgebleven vergelijkingen.
28
]
n is hier het aantal gegeven punten in het vlak. De som van b staat gelijk aan het aantal punten vermenigvuldigd met b. Nu delen we de vergelijking door n. Wat zien we dan? De som van alle ywaarden gedeeld door het aantal punten, en a maal de som van alle x-waarden gedeeld door het aantal punten. Dit zijn de gemiddeldes. Komt dat even goed uit. De gemiddeldes noteren we als volgt:
̆ en
̆
Nu drukken we meteen b uit in a:
̆
̌
En invullen het in de andere vergelijking in:
̆
̆
̆
̆
̆
̆ ̆ ̆
Nu hebben we voor zowel a als b een formule. De formule van a kan echter nog wel netter geschreven worden. Na wat knip en plakwerk ziet dat er zo uit:
̆
̆ ̆
en
̆
̌
Voorbeeld: Gegeven zijn vier punten in het vlak: (1,5), (2,6), (3,9) en (4,10). Vind de rechte met de minste afwijking tot deze punten. Oplossing: de gemiddelde x-waarde is gelijk aan 10/4= 2,5. De gemiddelde y-waarde is 30/4=7,5. = 1,9
en
De formule van de lijn is dus:
29
Onze balbanen Met deze methodes is het mogelijk een balbaan te reconstrueren. Daarvoor moet met behulp van lineaire regressie en de kleinste kwadraten methode de best passende lijn door de Pc’s gevonden worden. Hiervoor is het echter eerst nodig te bepalen in welke vorm de formule moet zijn die hiervoor gebruikt wordt. Onze wiskundige werkhypothese, is dat de meest belangrijke effecten goed door een derdegraads functie worden weergegeven.Wij gebruiken drie derdegraads functies. Eén die de beweging in het xy vlak beschrijft, één die dit in het yz vlak doet, en nog één voor het zx vlak. Wat bekend is over de bal is dat de baan in het xz vlak eruit zal zien als een afgeplatte parabool. Zonder luchtweerstand zou de bal immers een perfecte parabool afleggen. De luchtweerstand remt de bal echter af waardoor dit geen perfecte parabool vormt. Deze afgeplatte parabool kan met een derdegraads polynoom weergeven worden. De beweging in het xy vlak representeert afwijking die door effect aan de bal wordt meegegeven. Ook hiervoor is een derdegraadspolynoom erg geschikt. De banen zijn in parametervergelijking gegeven, omdat de functie zich in de driedimensionale ruimte bevindt. Zo zijn er dus drie vergelijkingen voor x, y en z als functie van t die samen een balbaan beschijven. MATLAB is in staat een driedimensionale balbaan te geven in vergelijkingen en met een grafische weergave. We kunnen opgeven in wat de graad moet zijn van de polynomen van de parametervergelijking. De vergelijking ziet er dan uit als:
Om deze vergelijkingen zelf op de stellen is veel rekenwerk vereist. Daarom laten we de balbanen door MATLAB berekenen. MATLAB gebruik vergelijkbare methodes (kleinste kwadratenmethode, lineaire regressie), maar is in staat tot hogere graden van functies te rekenen, is sneller dan wij en maakt geen rekenfouten. Voorbeeld Hier is een (door MATLAB) berekende balbaan van een schot. De parametervergelijking van deze baan is:
30
In grafische weergave:
Grafiek 1
Grafiek 2
Hier zijn twee afbeeldingen die de driedimensionale balbaan van het voorbeeldschot weergeven. In afbeelding 15 zijn alle assen te zien. Hier is de verplaatsing in de hoogte (z-as) goed te zien, met links de x-as en rechts de y-as. In afbeelding 16 is alleen het xy-vlak weergegeven. Hierop is een (kleine) afbuiging te zien in de baan. Dit is de curve van de bal.
31
Hoofdstuk 5: Rotatie, snelheid en curve We hebben als aanname dat de factor die ervoor zorgt dat de bal niet in een rechte lijn gaat de rotatie van de bal is in combinatie met de snelheid van de bal. Deze aanname is gebaseerd op eigen voetbalervaring. We verwachten dat de rotatie en de snelheid van deze rotatie de mate bepalen waarin de bal afwijkt van een rechte en dat de snelheid van de bal dit ook zal beinvloeden. Voor de curve van de balbanen ligt de focus op het xy-vlak. De afbuiging van de bal in de hoogte wordt buiten beschouwing gelaten, omdat we dit minder interessant vinden. We denken dat de hoogte minder beïnvloed wordt door de rotatie dan de afbuiging in het xy-vlak, en dus voor ons moeilijker is te onderzoeken.
Rotatie De rotatie van de bal wordt in twee componenten onderverdeeld. Ten eerste is er de rotatiesnelheid. Dit houdt in hoe vaak de bal per seconde in zijn geheel om zijn as draait. Dit wordt met Adobe After Effects bekeken door simpelweg één van de stippen te volgen en voor een bepaalde tijdsduur te tellen hoe vaak deze in beeld voorbij komt. Welke stippen dit zijn maakt niet uit, het kan per schot verschillen welke stippen het best te volgen zijn in beeld. We nemen aan dat de rotatiesnelheid en de rotatierichting gelijk blijven tijdens het traject. Dit maakt het beschouwen van de rotatie eenvoudiger, omdat zo op elk moment in de balbaan de rotatiesnelheid te bepalen is, door het aantal rotaties te delen door de tijdsduur. Dit geeft de waarde van de rotatiesnelheid in rotaties per frame (Rts/f). De andere component is de rotatierichting. Deze is moeilijker te bepalen. De rotatie van de bal vindt plaats rond één speciefieke as. Elk punt op de bal draait in een vlak dat loodrecht op deze as staat. Dit zorgt ervoor dat deze as te vinden is als het vlak waarin één van de punten zich beweegt bekend is. Als we dit vlak beschrijven met twee lijnen,
̅
̅
waarbij v1 en v2 een basis vormen voor dit vlak, geldt dat de as loodrecht op beide lijnen moet staan. De gezochte as vinden we met behulp van het kruisproduct. Het kruisproduct in een driedimensionale ruimte wordt gedefinieerd door de volgende 3 regels: 1. a×b staat loodrecht op a en b 2. a, b en a×b vormen een rechtshandig assenstelsel (zin van a×b ); 3. |a×b|=|a| |b| sin(θ) (absolute waarde van a×b), waarin θ de hoek tussen a en b is.3 Volgens de eerste regel staat de vector loodrecht op v1 en v2. De steunvector wordt nog gezocht. Door een assenstelsel te kiezen dat het middelpunt van de bal als oorsprong heeft ontwijken we deze steunvector. Omdat de rotatie-as altijd door de oorsprong zal gaan is de steunvector overbodig. Nu is het dus mogelijk om de rotatie-as te vinden indien we twee lijnen weten in het rotatievlak. Om deze lijnen te vinden zijn drie punten in dit vlak nodig. Het probleem met het vinden van deze punten is dat we een driedimensionaal voorwerp (de bal) 3
http://mathworld.wolfram.com/CrossProduct.html
32
in twee-dimensies gefilmd hebben. Om nu uit deze twee dimensionale beelden drie driedimensionale coördinaten te halen moeten we ervoor zorgen dat bij elk van deze coördinaten de x, y of z waarde 0 is. Daarvan uitgaande hebben we drie mogelijkheden. x=0, y=0 of z=0. Dit geeft ons drie punten die we kunnen gebruiken met een oorsprong in het midden van de bal.
Afbeelding 17 - 3d-bal-assenstelsel, de y-as loopt loodrecht het papier in Op de rand van de bal in afbeelding 17 weten we dat y gelijk is aan 0. Van elk punt op de rand is het eenvoudig de exacte coördinaten te bepalen. De waarden van x en z zijn te bepalen met behulp van pixelbepaling (hierover later meer). Met deze methode zijn we in staat om uit een tweedimensionaal beeld driedimensionale coördinaten te halen. Van de punten op de x-as is bekend dat z gelijk is aan 0 en van de punten op de z-as weten we dat x gelijk is aan 0. We volgen hiervoor een stip op de bal (zie Hoofdstuk 3 – ‘’Schietproef 3’’) en kijken waar deze, aan de rand van de bal, in beeld komt en waar deze de z-as passeert. Met onze beelden is het makkelijker x=0 te gebruiken dan z=0. Elke stip draait in zijn eigen rotatievlak. Nu is het een kwestie van handwerk. Eerst wordt frame voor frame bekeken welke stip het best te volgen is. Vervolgens zijn over een tijdsbestek van een halve rotatie de frames losgemaakt als foto’s. Nu hebben we een aantal foto’s waarop we één stip zien verplaatsen. Ten eerste is op elke foto de voetbal uit de foto geknipt. Deze geknipte voetballen zijn zo op elkaar geplaatst en zo geschaald dat ze perfect overlappen. Vervolgens is uit elke bal het te volgen vlak geknipt. Deze vlakken zijn vervolgens allemaal op één bal afgebeeld.
33
Afbeelding 18 De rode stippen bestaan uit gemeten middelpunten van de gevolgde stip en geconstrueerde punten. Het is duidelijk te zien hoe de stip zich over de bal beweegt. De stip is echter niet precies aan de zijkant of op de z-as gefilmd. Dit betekent dat we een voorspelling zullen moeten doen over waar de stip zich zal bevinden. Dit is goed te doen doordat de baan die de stip aflegt zeer goed te zien is. Het blijft echter een kleine onnauwkeurigheid. Omdat er voor ons geen andere methode voor handen is zullen we deze methode hanteren. Als eerste moeten deze punten bepaald worden in twee dimensies. Dit gebeurt door te kijken naar de pixelcoördinaten van de afbeeldingen. Dit werkt in principe hetzelfde als bij de pixelcoördinaten in After Effects. Elke pixel heeft een unieke x- en y-waarde in een assenstelsel dat linksboven in de foto zijn oorsprong heeft. We bepalen de pixelcoördinaten van het middelpunt om vervolgens de best passende cirkel om de bal heen te trekken. Dit gebeurt omdat de bal net niet precies rond is op de foto’s. Tijdens de opnames is voor een zo klein mogelijke sluitertijd gekozen zodat de vervorming zo laag mogelijk zou zijn. De sluitertijd is nooit oneindig klein te krijgen dus zal de bal altijd licht vervormd waargenomen worden. Dan wordt de afstand in pixels van de rand van de cirkel tot het centrum van de bal gemeten. Dit is de straal van de bal in pixels. Vervolgens worden de pixelcoördinaten van de punten A, B en C gemeten. De punten A en C liggen op de plek waar de stip verschijnt en verdwijnt, hier is y immers 0. Het punt B ligt op de z-as. Hier is x gelijk aan 0. Omdat we ons driedimensionale assenstelsel zelf gekozen hebben kunnen we ervoor kiezen de straal van de bal in dit assenstelsel gelijk te maken aan 1. Onze pixelcoördinaten moeten nog omgezet worden naar coördinaten in dit driedimensionale assenstelsel, door van al onze gemeten pixelwaardes van A, B en C eerst de pixelcoördinaten van het middelpunt van de bal af te trekken. Hierdoor verplaatsen we de coöordinaten naar een assenstelsel met de oorsprong gelegen in het midden 34
van de bal. Vanaf nu spreken we over de vectoren ⃑ ⃑⃑ ⃑, in plaats van over de punten A, B en C. Vervolgens normaliseren we deze vectoren(de vectoren liggen immers op de rand van de bal en moeten dus norm 1 hebben). We hebben nu drie vectoren in een tweedimensionaal assenstelsel waarin onze voetbal straal 1 heeft (de bal vormt nu de eenheidscirkel). Nu moeten deze vectoren omgezet worden naar ons driedimensionale assenstelsel. Voor de vectoren a en c is dit simpel. We hebben a en c immers zo gekozen dat y=0. Van deze vectoren hebben we dus onze drie coördinaten. Van vector b weten we de z- en x-waarde. In de normale eenheidscirkel met assen x en y wordt de x-coördinaat van een punt gegeven door de cosinus van de hoek en de y coördinaat door de sinus van de hoek. In ons geval zijn dit respectievelijk de y- en z-coördinaat. De z-waarde is ons echter al bekend. Als we de arcsinus nemen van de z-waarde vinden we hoek t (zie afbeelding 19). Vervolgens nemen we de cosinus van t en we hebben onze y-waarde. Nu hebben we ook ons derde coördinaat voor vector b. Nu deze drie punten gevonden zijn kunnen we simpel het draaiingsvlak beschrijven. Omdat we weten dat ⃑ ⃑⃑ ⃑ niet gelijk zijn kunnen we twee willekeurige vectoren van elkaar aftrekken en dit als de ene vector voor ons vlak nemen, en met twee andere vectoren hetzelfde doen. Bijvoorbeeld ⃑ ⃑⃑ ⃑⃑ ⃑ . Elk punt in ons
Afbeelding 19
⃑⃑ ⃑ vlak is nu te schrijven als ⃑ ⃑⃑ waarbij elk punt een uniek en paar heeft . Het is echter niet het vlak, maar de draaiingsas die we zoeken. Deze is nu eenvoudig te krijgen door het kruisproduct te nemen van de zojuist gekozen vectoren zoals al eerder is uitgelegd. Deze vector is te ontbinden in een x- ,y- en zcomponent. Aangezien we de vector zo gedefiniëerd hebben dat hij loodrecht op het draaiingsvlak staat, staat de z-as loodrecht op de draaing van de bal in het xy-vlak, de x-as loodrecht op de draaing in het yz-vlak en de y-as loodrecht op de draaing in het xz-vlak.
Nu deze vector gevonden is hebben bestaat nog één probleem. Ons nieuwe assenstelsel ligt anders georiënteerd dan ons oorspronkelijke assenstelsel. De z-as staat wel nog steeds loodrecht omhoog. We zijn er hierbij vanuit gegaan dat we de bal steeds loodrecht van voren hebben gefilmd. De z-waarde zal niet veranderen als we de vector van ons bal-assenstelsel naar ons oorspronkelijke assenstelsel halen. Ons onderzoek is enkel gericht op de rotatie in het xyvlak. Wij hebben daardoor alleen de z-component van onze draaiingsvector nodig en kunnen de x- en y-component van de vector laten vervallen.
35
Basistransformatie Als je ook de x- en y-as van het bal-assenstelsel in dezelfde richting wil krijgen als die van het orginele assenstelsel, zal er een basistransformatie nodig zijn. Omdat we ervan uitgaan dat de zas gelijk is gebleven zal deze basistransformatie een draaiing rond deze as voorstellen. Om de hoek te bepalen waarover geroteerd moet worden is het voldoende te weten in welke mate één van de assen gedraaid moet worden. In ons geval zullen wij onderzoeken met welke hoek de x-as van het bal-assenstelsel gedraaid moet worden, zodanig dat deze parallel aan het assenstelsel komt te liggen van het assenstelsel van de balbaan (de y-as draait met dezelfde hoek mee). Daarvoor moeten we eerst bepalen hoe de x-as van ons bal-assenstelsel zich bevindt in het originele assenstelsel. In ons originele assenstelsel wordt de richting van de bal in het xy-vlak voorgesteld als de afgeleide. We weten op welk moment we onze stip hebben gevolgd, wat ervoor zorgt dat we de richting kunnen bepalen die bal hier had. Deze richting zal gegeven worden door de afgeleide in het xy-vlak:
Deze richting zal per frame een klein beetje verschillen, maar door deze richtingen te middelen komen we tot een goede schatting. Deze uitkomst bepaalt de richtingscoëfficiënt (p) van de lijn
waarvan we aannemen dat deze parallel loopt aan de x-as van ons bal-assenstelsel. Door dit te zeggen gaan we ervan uit dat er altijd loodrecht op de richting van de bal is gefilmd. Dit is een gedurfde aanname, maar deze is noodzakelijk omdat wij de locatie van de derde camera niet exact weten. In hoofdstuk 7 - ‘Discussie en Conclusie’ zullen wij er op in gaan hoe dit te verbeteren is als de exacte locatie van de derde camera wel bekend is. De locatie van de bal doet er voor onze draaiingsvector niet toe, we kunnen q weglaten. Nu hoeven we alleen nog te bepalen met welke hoek (α) px gedraaid moet worden om op de x-as van ons oorspronkelijke assenstelsel te komen liggen. De hoek tussen px en de x-as noemen we β en is gelijk aan: (
)
Indien p>0, dan geldt dat α=β en de gezochte draaiingshoek is. We vermenigvuldigen dan onze draaiings-as met rotatiematrix R.
R=[
]
Als p<0, dan geldt α≠β. Als de x-as met β gedraaid Afbeelding 19
wordt, volgt de lijn 36
. We willen echter de andere
kant op draaien. Dit kan op twee manieren. We kunnen zeggen dat (in radialen) of we draaien met de klok mee en dan geldt Het is echter makkelijker om eerst de rotatiematrix op te stellen die het oorspronkelijke assenstelsel naar het bal-assenstelsel draait. Dit wordt gegeven door rotatiematrix Q. [
]
Omdat de inverse matrix hiervan de tegengestelde bewerking uitvoert levert de inverse matrix van Q ons de rotatiematrix met draaihoek α op. Dit noemen we draaiingsmatrix M (=Q-1). [
]
Nu roteren we de vector die onze draaiings-as beschrijft om de z-as met hoek α met behulp van M en we hebben onze draaiings-as in het oorspronkelijke assenstelsel. Nu zijn de rotatiesnelheid en de rotatierichting bepaald. Deze kunnen nog gebundeld worden tot één vector, namelijk door de lengte van de draaiingsvector afhankelijk te laten zijn van de rotatiesnelheid. Hoe sneller de bal draait, hoe groter de draaiingsvector is. Wij zullen de vector op onze draaings-as als lengte de draaiingsnelheid in rotatie per frames geven. Daarom wordt de draaiings-as eerst genormaliseerd door deze door zijn eigen lengte te delen. Deze vector vermenigvuldigd met de rotatie geeft de uiteindelijke rotatie in de x-,y- en z-richting weer.
37
Snelheid van de bal Los van de rotatiesnelheid staat de snelheid van de bal zelf in zijn baan. Omdat de driedimensionale balbaan bestaat uit een parametervergelijking van x=x(t), y=y(t) en z=z(t) kan per component (x,y,z) de snelheid van de bal berekend worden op elk tijdstip. Dit is eenvoudig te doen door de functies af te leiden naar de tijd. Derdemachtsfuncties die de plaats van de bal weergeven worden zo kwadratische functies die de snelheid weergeven. Dit toont meteen aan dat de snelheid niet constant is. Hij is namelijk afnemend voor x (door de luchtweerstand) en parabolisch voor z (de snelheid neemt eerst af zolang de bal stijgt in hoogte en neemt toe zodra hij daalt). Voor de y- waarde ligt het ingewikkelder, omdat deze beïnvloed wordt door de curve. De afwijking vindt namelijk plaats op de y-as. Bij deze methode komt geen handwerk kijken, omdat MATLAB dit allemaal kan uitrekenen. De snelheid van de bal is per moment voor de x,y en z richting te bepalen door de parametervergelijking te differentiëren en t in te vullen voor het moment waarop je de snelheid wilt weten. Om echter de gemiddelde snelheid van de gehele balbaan te bepalen is een andere methode nodig. De gemiddelde snelheid van de hele balbaan wordt gegeven door de totaal afgelegde afstand te delen door de tijd die daarvoor nodig is. Deze afgelegde afstand berekenen we met de formule voor de booglengte. In ons geval gaat het over een driedimensionale balbaan, tussen het interval booglengte van onze balbanen worden dan gegeven door ∫ √(
)
(
)
(
)
anders geschreven, ∫ √(
)
(
)
(
Daarna is de gemiddelde snelheid eenvoudig uit te rekenen met
38
)
De
Curve We veronderstellen dat de curve van de bal wordt bepaald door de rotatie in combinatie met de snelheid van de bal. Hóe dit wordt bepaald is door ons te onderzoeken. Er wordt in dit onderzoek alleen naar de afbuiging in het xy-vlak gekeken. De hoogte z wordt dus weggelaten. Om de mate waarin een bal zijn curve maakt te beschouwen, maken we gebruik van de tweede afgeleide van deze functie in het xy-vlak. Waar de afgeleide van een functie de richtingscoefficient geeft (hoezeer de bal van richting verandert), geeft de tweede afgeleide weer hoe deze richtingsverandering verandert. De curve is immers de mate waarin de balbaan afwijkt van een rechte lijn. We hebben nu de positie van de bal in parametervergelijking. De richting in het xy-vlak wordt gegeven door
De afgeleide van de richting, de dubbele afgeleide dus wordt:
Om nu de curve (c) te bepalen willen we weten hoeveel de bal in totaal uitgeweken is. Dit is dus in welke mate de richting van de bal verandert is tussen het begin en het eindpunt. Dit wordt weergegeven door de integraal van de tweede afgeleide tussen het begin en het eindpunt van de balbaan.
∫
∫
Omdat dit de totale curve bepaald, hangt deze totale curve ook nog af van de lengte van de balbaan. We willen een vaste eenheid voor al onze banen, zodat we deze kunnen vergelijken delen we deze totale curve nog door de lengte van de balbaan. ∫
Dit wordt onze maat voor de curve.
39
Correlatie Om te ontdekken of er een lineair verband bestaat tussen de rotatie (richting én snelheid), de snelheid van de bal en de curve maken we gebruik van een correlatie. Uit de correlatie volgt een correlatiecoëfficient, wat een cijfer geeft tussen -1 en +1. Een correlatiecoêfficient van 1 betekent een perfecte positieve samenhang tussen de resultaten, -1 betekent een negatieve samenhang en 0 betekent geen lineaire samenhang. Hoe verder dit getal van 0 af zit, hoe groter de samenhang is.
Afbeelding 20 Afbeelding 20 laat dit nog beter zien ( =correlatie). De correlatiecoëfficiënt wordt berekend met een formule, namelijk:
∑ ̅
√∑ ̅
̅ ∑
̅
Waarbij x en y de gebruikte grootheden zijn en ̅ staat voor de gemiddelde waarde van alle x. De correlaties van onze eigen waarden hebben we op drie manieren gedaan. Ten eerste de correlatie tussen rotatie en curve om te controleren of hier een lineair verband tussen bestaat. Vervolgens is ook nog de correlatie tussen de rotatie gedeeld door de snelheid en de curve berekend. Als laatste is de correlatie tussen de curve en de rotatie gedeeld door de snelheid in het kwadraat berekend.
40
Hoofdstuk 6: Resultaten Hieronder wordt de correlatie tussen de curve en de rotatie beschreven. Er zijn drie varianten die verschillen in het aantal waardes die genomen zijn om de correlatie te berekenen. Dit is gedaan om een indicatie te geven van onze resultaten en meetfouten. Zie Bijlage 3 voor de volledige tabellen. Rotatie en curve aantal schoten Correlatie 9 0.37971873 15 -0.166967804 18 -0.157476815 Tabel 2 - Correlatie tussen rotatie en curve Rotatie/snelheid en curve aantal schoten Correlatie 9 0.586800648 15 0.612843569 18 0.61432142 Tabel 3 – Correlatie tussen rotatie gedeeld door snelheid en curve Rotatie/snelheid2 en curve aantal schoten Correlatie 9 0.646804285 15 0.570209553 18 0.560465547 Tabel 4 - Correlatie tussen rotatie gedeeld door snelheid in het kwadraat en curve
41
Voor een nog duidelijkere weergave volgen hier twee driedimensionale grafieken met op de x-as de rotatie, de y-as de snelheid en de z-as de curve.
Grafiek 3 – Rotatie, snelheid, curve
Grafiek 4 f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 + p21*x^2*y + p12*x*y^2 + p03*y^3 Coefficients (with 95% confidence bounds): p00 = 26.13 (-246.4, 298.7) p10 = 182 (-1768, 2132) p01 = -111 (-913.8, 691.8) p20 = -1805 (-1.302e+004, 9415) p11 = 97.38 (-2583, 2778) p02 = 121.1 (-738.9, 981.1) p30 = 6427 (-3.335e+004, 4.62e+004) p21 = -810.5 (-7764, 6143) p12 = 65.82 (-1937, 2068) p03 = -50.45 (-341.3, 240.4) Goodness of fit: SSE: 0.4829 R-square: 0.6995 Adjusted R-square: 0.3615 RMSE: 0.2457
42
Grafiek 5 – Rotatie, snelheid2, curve Oppervlakte: Linear model Poly33: f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 + p21*x^2*y + p12*x*y^2 + p03*y^3 Coefficients (with 95% confidence bounds): p00 = -5.863 (-98.57, 86.84) p10 = 297.8 (-1365, 1960) p01 = -17.95 (-197.8, 161.9) p20 = -2565 (-1.573e+004, 1.06e+004) p11 = 55.84 (-922.2, 1034) p02 = 16.45 (-199.6, 232.5) p30 = 7732 (-3.3e+004, 4.846e+004) p21 = -573.7 (-4745, 3598) p12 = 61.57 (-761.1, 884.2) p03 = -9.937 (-84.52, 64.64) Goodness of fit: SSE: 0.4963 R-square: 0.6912 Adjusted R-square: 0.3437 RMSE: 0.2491
43
Interpretatie resultaten Onze resultaten zijn op te splitsten in twee delen. Het eerste deel zijn de tabellen, welke ons niet vertellen wat de relatie tussen de rotatie/snelheid en de curve is, maar wel of er een verband is en hoe betrouwbaar dit verband is. De twee geplotte oppervlakken vertellen ons wat het benaderde verband is tussen de rotatie, de snelheid en de curve. Ook kunnen wij met behulp van de correlatie het verschil tussen de betrouwbaarheid van de verschillende schoten inschatten. Zo kunnen we achterhalen of er nog tussentijdse meetfouten zijn gemaakt bij de schoten. Hiermee bedoelen wij dus niet de meetfouten die bij alle schoten hetzelfde zijn, maar meetfouten die uniek zijn voor een bepaald schot. Doordat we de correlatie van meerdere groepen hebben berekend waarbij een deel van de gegevens hetzelfde is, en waarbij een deel van de gegevens nieuw is kunnen we aan het verschil in correlatie tussen deze groepen zien in welke mate er tussentijdse meetfouten zijn gemaakt. Als derde kunnen we zien of het meenemen van snelheid in relatie tot de curve een positief effect heeft op de corelatie. Er zijn telkens drie verschillende correlaties berekend. Eén waarbij alleen naar de rotatie gekeken is, één waarbij de rotatie door de snelheid gedeeld werd en één waar de rotatie door de snelheid in het kwadraat is gedeeld. Deze geven allemaal een eigen correlatiecoëfficiënt. De coëfficiënt die het verst van nul ligt geeft het duidelijkste verband aan. Daaruit kunnen we afleiden of rotatie/snelheid een betere indicator is van de te verwachten curve. Ten eerste kijken we of er überhaupt een verband aanwezig is. Als we kijken naar de correlatiecoëfficiënt van de rotatie t.o.v. de curve lijkt er nauwelijks een verband te zijn. Zodra snelheid meegerekend wordt zien we dat de correlatiecoëfficiënt toeneemt. Het is dus duidelijk dat de snelheid meegenomen moet worden in ons onderzoek naar de curve. Verder lijken er behoorlijke fouten tussen de verschillende metingen te bestaan wanneer we de correlatiecoëfficiënten bij de eerste drie schoten beschouwen. Zodra de snelheid echter wordt meegenomen worden de verschillen tussen de correlaties een stuk kleiner. Aangezien we hiervoor al geconcludeerd hadden dat de snelheid meegenomen moet worden om een verband te vinden, kunnen we voor de benadering van onze meetfouten afgaan op de waardes waarbij de snelheid meegenomen is. Wanneer er alleen naar deze waardes gekeken wordt zien we dat de meetfouten meevallen. Dat er een klein verschil is in correlatiewaarden is alleen maar logisch aangezien we van te voren al wisten dat er door bepaalde aannames meetfouten in het onderzoek zouden sluipen. Voor onze definitieve correlatie kijken we naar de meting waarbij alle schoten meegerekend zijn. Hieruit blijkt dat de rotatie gedeeld door de snelheid de beste correlatiewaarde oplevert. Voor een duidelijkere weergave van het verband tussen de rotatie, de snelheid en de curve te vinden hebben we onze waardes in een driedimensionale grafiek gezet. Hierbij staat de rotatie op de x-as, de snelheid op de y-as en de curve op de z-as. Aan elk bekend koppel rotatie-snelheid, is de curve toegevoegd. Vervolgens hebben we MATLAB het best passende oppervlak hier doorheen laten bepalen. Dit vlak wordt bepaald door twee derdegraadspolynomen. Deze worden door middel van de kleinste-kwadraten methode en lineaire regressie gevonden. Dit gebeurt op dezelfde manier als bij de balbaan, alleen gebeurt het nu in een driedimensionaal assenstelsel en is de uitkomst geen baan maar een vlak. Dit vlak stelt ons in staat ruwweg de curve te voorspellen als de rotatie en snelheid gegeven zijn. Uit de waardes die de “juistheid” van de vlakken weergeven blijkt opnieuw dat de rotatie gedeeld door de snelheid een grotere correctere inschatting mogelijk maakr. heeft dan als de snelheid gekwadrateerd wordt. Hierbij 44
wordt naar de SSE en de RMSE waardes gekeken. Deze waardes vertellen ons iets over de voorspellende betrouwbaarheid van de gevonden functie. Hoe dichter deze waardes bij 0 liggen, hoe beter de voorspelling. Wij zullen er nu niet op ingaan hoe deze waardes berekend worden door Matlab. Nu we weten dat het vlak waarbij de snelheid niet gekwadrateerd is het betrouwbaarst is wordt onze formule die de curve voorspelt de formule van dit vlak. Dit wordt:
Dit is de formule die, volgens onze resultaten, de beste voorspelling van de curve geeft aan de hand van de rotatie en de snelheid van de bal. Doordat het een derdegraadsfunctie is geeft dit echter alleen de beste voorspelling voor waardes voor r en v die enigszins in de buurt liggen bij de door ons gemeten waardes. Het is mogelijk dat een tweedegraadsfunctie een betere voorspelling geeft voor waardes die verder van de door ons gemeten waardes afliggen. Deze formule zit gemiddeld 10.5% naast de gemeten waarde. Zie Bijlage 4 voor verdere illustratie.
45
Hoofdstuk 7: Conclusie en discussie Betrouwbaarheid resultaten Doordat een deel van dit onderzoek op empirisch gemeten waardes is gebouwd zullen er onherroepelijk meetfouten zijn gemaakt. Deze meetfouten hebben invloed op ons uiteindelijke resultaat. Hieronder zullen we de gemaakte meetfouten bespreken en de mogelijke verbeteringen van deze fouten weergeven.
Reconstructie balbaan De reconstructie van de balbaan berust in dit onderzoek op twee camera’s. Met de beelden die deze camera’s gefilmd hebben is de balbaan gereconstrueerd. Hierbij zijn de positie en de richting van de camera gebruikt. Dit zal dan ook onze eerste meetfout opleveren. De positie hebben we vrij precies bepaald. De afwijking van de positie van de camera zal dan ook klein zijn. De richting van de camera is minder betrouwbaar. Dit hebben we wel grotendeels kunnen corrigeren met behulp van rotatie matrices.
Controle van balbaan Het is te controleren of onze driedimensionale balbanen goede weergaves van de werkelijkheid geven. We doen dit door onze hele methode, van pixelcoördinaten tot puntreconstructie tot balbaanreconstructie, in tegengestelde richting uit te voeren. Wat dit inhoudt: neem een bekende balbaan in drie dimensies. Kies uit deze baan een aantal punten, ongeveer hetzelfde aantal punten dat voor de balbaanreconstructie gebruikt is. Van deze punten zijn de x-, y- en zcoördinaten eenvoudig te bepalen (met behulp van MATLAB). Laat nu vanuit deze punten een vector lopen, richting een camera. Deze vector is eerder al voorgekomen, maar dan in tegengestelde richting. Deze vector gaat door het (denkbeeldige) beeldvlak. Het punt waar deze vector het beeldvlak snijdt, geeft ons het bijbehorende pixelcoördinaat. Door dit voor meerdere punten te doen is de balbaan die waargenomen zou moeten zijn door de camera te bepalen. Nu passen we onze correctie omgekeerd toe. Alsde beelden oorspronkelijk bijvoorbeeld 3,5 graden naar links werden gedraaid, draaienwij nu 3,5 graden naar rechts. Door vervolgens deze uitgerekende balbaan te vergelijken met de gefilmde balbaan is het mogelijk de nauwkeurigheid van de metingen na te gaan. De punten waar de balbaan uit geconstrueerd is zijn punten waarvoor geldt dat de afstand tot de vectoren die vanuit de camera’s lopen het kortst is. Een punt ligt dus ergens tussen deze lijnen in. Daarna is de best passende derdegraads polynoom door deze punten getrokken. Deze dingen zorgen er dus voor dat de berekende baan nooit precies hetzelfde beeld zal teruggeven wanneer je het terugrekent. Wel geeft het aan hoe groot de berekende punten afwijken van de originele punten in de beeldvlakken van de camera’s. Eerst worden uit een driedimensionale balbaan een aantal punten berekend op verschillende tijdstippen (dit aantal is ongeveer gelijk aan het aantal frames waaruit de balbaan in eerste instantie is opgezet) door simpelweg waarden van t in te vullen in de parametervergelijking, waarna coördinaten (x,y,z) volgen. Vervolgens stellen we een lijn (l) op met . 46
Deze lijn laten we een vlak snijden dat parallel loopt aan het beeldvlak van een camera (voor camera 1 bijvoorbeeld het vlak waarvoor geldt x=1). Met de omrekenfactor voor de beeldvlakken bepalen we daarna de pixelcoördinaten en vergelijken deze met de originele. Voorbeeld Wij hebben dit uitgeprobeerd voor een paar schoten. Hieronder zullen we de waarden bespreken van één schot. Dit is schot 12 (zie Bijlage 5 voor de grafieken van de pixelcoördinaten van de schoten). Voor dit schot hebben we alle bovenstaande stappen doorlopen. Hierbij hebben we dat één keer met behulp van draaiingsmatrixen gedaan en één keer zonder gebruik te maken van draaiingsmatrixen. Vervolgens hebben we onze resultaten vergeleken. Eerst hebben we naar de camera op de x-as gekeken. Zonder de draaiingsmatrixen hadden onze gereconstrueerde xwaarden een gemiddelde afwijking van 10,64%. Voor de y-waarden was dit 4,00%. Dit verbeterde aanzienlijk na toepassing van onze rotatie matrices zoals beschreven in het hoofdstuk Beeldonderzoek. De gemiddelde x-afwijking kwam uit op 0,20% De y-as afwijking kwam uit op gemiddeld 1,35%. De camera op de y-as had zonder correctie een gemiddelde afwijking van 15,66% voor de xpixels en een afwijking van 4,37% voor de y-pixels. Na gebruik van de rotatie matrices waren dit afwijkingen van respectievelijk 0,32% voor de x-as en 1,60% voor de y-as. Hieruit kunnen we concluderen dat met name de rotatie matrix die de draaiing op de x-as herstelde erg goed gewerkt heeft. Dit is prettig, want voor ons onderzoek hebben wij de zwaardes buiten beschouwing gelaten.
Draaiing bal Bij het meten van de draaiing van de bal hebben we een aantal aannames moeten maken. Deze aannames zijn niet 100% juist. Dit zal invloed hebben op de correctheid van de door ons gemeten draaiing. Dat het noodzakelijk was deze aannames te maken komt vooral doordat de exacte positie van onze derde camera niet bekend was. Wij rekenden er namelijk op dat het nodig zou zijn de bal in zijn vlucht te volgen en we hebben vanaf meerder posities gefilmd om te kijken wat de beste beelden zou opleveren. Achteraf bleek dit allebei onnodig. Aan het eerste deel van de balbaan hadden we genoeg om de rotatie te berekenen. Dit betekent dat camera 3 de bal niet hoeft te volgen maar alleen het begin van de baan hoeft te filmen. Ook hebben we aan de hand van de beelden kunnen bepalen wat de ideale positie van camera 3 is. Door deze informatie zouden wij bij een volgende meting een andere opstelling kiezen wat betrouwbaardere informatie oplevert.
Verbetering rotatie Omdat de exacte locatie van camera 3 (De camera die de rotatie van dichtbij filmde) niet bekend was moesten we aannemen dat de z-as van ons bal-assenstelsel parallel liep met de z-as van ons originele assenstelsel. Hierdoor zullen onze resultaten enigszins vervormd zijn. Nu gaan we er namelijk vanuit dat de rotatiecamera op een oneindige afstand stond, zodat alle beelden loodrecht op de z-as zijn geschoten. In werkelijkheid is dit natuurlijk niet zo. Om dit op te lossen moet je exact weten waar de camera zich bevindt. Als dit bekend is moet het bal-assenstelsel opnieuw gedefinieerd worden. De y-as wordt nu gevormd door de lijn van de derde camera naar de bal oneindig te verlengen in beide richtingen. Om de bal z-as te vinden is de x-as nodig. Wel 47
weten we al dat de z-as in het vlak ligt dat loodrecht boven onze gevonden y-as ligt, omdat we ervan uitgaan dat de camera niet om zijn eigen as is gedraaid. Ook is bekend dat de oude z-as in dit vlak ligt. De x-as vinden we door even te doen alsof onze z-as nog steeds de orginele z-as is. In werkelijkheid zal deze zas gedraaid zijn. Dit mag omdat we gebruik gaan maken van het kruisproduct en beide z-assen in het zelfde vlak liggen. We nemen nu het kruisproduct tussen onze orginele z-as (in het bal-assenstelsel geplaatst) en de gevonden y-as. Dit geeft de x-as. Nu Afbeelding 21- draaiing die niet nemen we het kruisproduct tussen deze x-as en de yheeft plaatsgevonden as en we hebben onze z-as. De assen die zo vinden zijn de meetkundige interpretatie van het bal-assenstelsel in ons oorspronkelijke assenstelsel. Nu moeten alleen nog de hoeken tussen deze assen en het oorspronkelijke assenstelsel gevonden worden. Dan kan er door middel van drie rotatie matrices (één voor de x-as, één voor de y-as en één voor de z-as) beschreven worden hoe gedraaid moet worden zodat de assenstelsels samenvallen. Als deze rotatie matrices vervolgens vermenigvuldigd worden en hier de inverse van genomen wordt hebben we de matrix die we willen. Door onze gevonden draaiingsvectoren(de vector die op de draaiingsas ligt) nu te vermenigvuldigen met deze matrix krijgen we de draaiingsvectoren in het orginele assenstelsel.
Verband tussen rotatie, snelheid en curve Uit onze correlatiecoëfficiënten (met een hoogste waarde van 0.613) blijkt dat er een verband aanwezig is, maar dat dit geen perfect lineair verband is. Wij verwachten dat deze waarde niet 1 is door de hierboven genoemde meetfouten. Dat deze waarde slechts 0.613 is betekent dat onze formule om de curve te voorspellen als de draaiing en rotatie gegeven zijn niet geheel betrouwbaar is. Verder hebben wij een aantal factoren buiten beschouwing gelaten. Zo hebben wij in onze berekeningen geen rekening gehouden met de wind, of met oscillaties van de bal nadat deze geraakt is. Het is zeer waarschijnlijk dat deze factoren ook invloed hebben op de curve. Dit hebben wij in dit onderzoek echter buiten beschouwing gelaten. Het is dus ook niet vreemd dat we geen correlatiewaarde van 1 hebben gevonden. De correlatiewaarde van 0.613 vertelt ons dat er een trend is tussen de rotatie, de snelheid en de curve, maar dat dit geen één op één verband is. Wij denken dat de manier waarop MATLAB het best passende vlak heeft geplot geen grote invloed op de nauwkeurigheid van onze resultaten zal hebben. Er is zelfs een kans dat het feit dat het best passende vlak genomen is enkele van onze eerdere meetfouten neutraliseert. Hier durven wij echter geen voorspellingen over te doen. We moeten dus in ons achterhoofd houden dat de gevonden formule niet hét verband is, maar slechts het best passende verband dat te vinden is met onze resultaten. Wij verwachten dat hét verband echter wel bestaat en dat de voorspelling van dit verband telkens beter zal worden naarmate er minder meetfouten tijdens het onderzoek gemaakt worden.
48
Vervolg onderzoek De grote kracht van dit profielwerkstuk zit meer in de gebruikte methodes dan in het resultaat. Dit profielwerkstuk biedt dan ook mogelijkheden om verder te bouwen. De grote truc is dat het niet meer nodig is om de camera’s heel nauwkeurig op te stellen. Het maakt onderzoek mogelijk waarbij de opstelling niet van te voren is uitgedacht. Ter plekke kunnen op willekeurige plaatsen camera’s worden geplaatst. Vervolgens kan er opgenomen worden en als er maar genoeg referentie punten zijn en de locatie van de camera’s bekend is kan alles zo aangepast worden dat het als input voor onze code kan dienen. Dit maakt onderzoek naar balbanen eenvoudiger en toegankelijker. Als we puur op ons terrein, het voetbalveld, door willen gaan valt er ook nog een hoop te verbeteren. Deze verbeteringen zijn vooral van technische aard. Wij denken dat onze methode theoretisch klopt, ook al zullen hier altijd verbeteringen mogelijk blijven. Het materiaal dat wij tot onze beschikking hadden was echter niet van optimale kwaliteit. Bij onze derde meting hadden we een extra camera om de rotatie te filmen. Dit was een kwalitatief betere camera, met een instelbare sluitertijd en een hogere frame-rate. De beelden van deze camera waren ook zichtbaar scherper en beter bruikbaar. Als we twee van deze camera’s voor handen hadden was het waarschijnlijk wel mogelijk geweest de baan van de voet te meten. Daarna hadden we voor de reconstructie van de baan van de voet dezelfde methodes kunnen gebruiken als voor de reconstructie van de balbaan. Hoe het daarna verder gaat kan alleen verder onderzoek uitwijzen, maar met dit profielwerkstuk is hier alvast een mooie basis voor gelegd. Vanuit dit profielwerkstuk is het onderzoek naar de curve goed uit te breiden naar de curve in het xz-vlak en de curve in het yz-vlak. De beschreven methodes kunnen allemaal gebruikt worden om dit te onderzoeken.
Toepassingen Dit onderzoek is niet alleen toepasbaar op voetbal. Dezelfde methodes werken (waarschijnlijk) prima voor andere balsporten. De camera’s zullen dan wellicht anders gepositioneerd zijn maar de methode en programmering zijn nog steeds bruikbaar. Een andere sport waarbij rotatie bijvoorbeeld een grote rol speelt is tennis. Elke bal wordt tijdens een tenniswedstrijd met een bepaald soort effect gespeeld. Elk effect heeft ook een andere uitwerking tijdens het spel. Met de door ons genoemde methodes zou hier op een vergelijkbare manier onderzoek naar gedaan kunnen worden. Of de curve van een tennisbal bijvoorbeeld volgens een zelfde manier beïnvloed wordt door de rotatie als een de curve van voetbal. Een ander mogelijk experiment is onderzoeken of de draaiing van het racket tijdens het raken van de bal de balbaan beïnvloedt. Zo zijn er nog vele andere mogelijkheden bij andere (bal)sporten, zoals honkbal en hockey. Het gedeelte van de balbaanreconstructie hoeft niet eens alleen over sport te gaan. Elke verplaatsing die gefilmd is met tenminste 2 camera’s, kan ons programma omzetten in een driedimensionale baan.
49
Volledige automatisering Het volgende niveau van ons systeem is volledige automatisering. Dan zou het echt mogelijk zijn 2 camera’s op een willekeurige plaats neer te zetten, zolang ze maar en de goal of een ander voorwerp waarvan de exacte afmetingen bekend zijn, en het te volgen object in beeld hebben. Dan is het ook niet meer nodig om te meten waar de camera’s zich bevinden.Theoretisch is het mogelijk om een programma te maken dat deze beelden binnenkrijgt en daar direct de balbaan uit afleidt. Wij hebben dit programma niet gemaakt omdat wij daarvoor niet goed genoeg kunnen programmeren. We zullen we beschrijven hoe dit zou moeten. Ten eerste moet het programma in staat zijn aan de hand van hoe de goal op het beeldvlak wordt weergegeven te bepalen waar de camera zich bevindt. Als bekend is wat de verhoudingen en de realtieve afstand van het beeldvlak zijn is dit theoretisch gezien mogelijk. Wij zullen er nu echter niet op in gaan hoe dit precies werkt. Als de locatie ten opzichte van de goal bekend is, moet een assenstelsel gekozen worden waarbij beide camera’s zich op een aparte as bevinden. Als dit gedaan is moeten de rotatie matrices gevonden worden waarmee de camera’s loodrecht op deze assen gedraaid kunnen worden. Nu bekend is waar de beide camera’s staan in dit nieuw gekozen assenstelsel moet After Effects automatisch opdracht krijgen de bal te volgen. Nu hebben wij After Effects elke keer handmatig opdracht gegeven de bal te volgen maar aangezien de bal niet veranderd tijdens het schieten moet het mogelijk zijn after effects automatisch de bal te laten volgen. Nadat dit gebeurt is kunnen deze gegevens door ons programma worden gehaald en rollen de balbanen eruit.
Op het veld Nu rest slechts de vraag wat we hier aan hebben. Kunnen wij nu net zo schieten als David Beckham? Nee, dat is helaas niet gelukt maar onze resultaten hebben wel degelijk nut op het voetbalveld. Uit onze resultate bleek dat de curve van de rotatie en van de snelheid afhankelijk is. Dit verband wordt versimpeld weergegeven door de volgende vergelijking:
Hieraan zien we dat als de rotatie groter en de snelheid kleiner wordt de curve toeneemt. Dit is met name toe te passen bij het nemen van vrije trappen. Naarmate de bal dichter bij het doel ligt is er meer curve nodig om de bal langs het muurtje te krullen. Als je de bal dus om de muur heen wil krullen van dichtbij is het zaak om de bal niet al te hard te schieten en vooral te zorgen voor een grote rotatie. Als je te hard schiet zul je de rotatie immers in gelijke mate moeten vergroten om dezelfde curve te behouden. Als de bal verder weg van de goal ligt en er dus minder curve nodig is kan de bal ook voller geraakt worden wat resulteert in een grotere snelheid een kleinere rotatie. Dit verband is versimpeld waardoor onze conclusies dus niet een perfecte weergave van de werkelijkheid geven, maar ze zijn zeker toepasbaar en in het vervolg zullen wij onze vrije trappen wat minder hard schieten, en meer benden like beckham.
50
Algemene Conclusie Al met al zijn wij erg tevreden over dit profielwerkstuk. Natuurlijk zijn er dingen die beter hadden gekund, en is het hele onderzoek nog lang niet afgelopen maar dat zal het nooit zijn. Naarmate we vorderden in ons onderzoek kwamen we telkens meer zijpaden tegen. Hoe verder we kwamen, des te meer mogelijkheden zich aanboden. En nu we eenmaal op dit punt zijn aangekomen, zien we telkens beter hoe we die zijpaden zouden kunnen bewandelen. Helaas was daar geen tijd meer voor, maar het is ook goed. Een onderzoek duurt niet eeuwig, en nu is het de beurt aan anderen om verder in dit onderwerp te duiken. En dit is één van de punten waar wij zelf het trotst op zijn. Wij hebben het idee dat wij een relatief eenvoudige manier van onderzoek naar bewegende objecten mogelijk hebben gemaakt. Toen wij ons inlazen over het onderwerp kwamen we een grote hoeveelheid aan eerdere onderzoeken tegen. Deze gingen over alles wat maar met voetbal te maken had. Tussen al deze onderzoeken zat echter amper puur wiskundig onderzoek. Hiermee willen we niet zeggen dat er geen wiskundige onderzoeken naar dit onderwerp bestaan, maar we zagen wel dat het natuurkundig gerichte onderzoek domineerde. Op het moment dat er rekening moet worden gehouden met de oscilatie van de bal zelf, met de lucht die om de bal zweeft en alle andere natuurkundige verschijnselen wordt het een te ingewikkeld probleem voor analytische methodes. Wiskundig gezien is het echter wel toegankelijk. Door alleen wat je ziet te onderzoeken maak je een ongelofelijk complex onderwerp toch bereikbaar op een wetenschappelijk zinvolle manier.
51
Nawoord Voor ons was dit onderzoek een reis. Een reis door de wereld van voetbal en wiskunde. We kwamen aan op het voetbalveld, keken om ons heen en hadden nog geen idee wat ons in dit land te wachten stond. Langzaam maar zeker, naarmate we het land verkenden, kwamen we meer te weten over dit spannnende land en de paden verschenen aan onze voeten. Zo liepen wij door deze wereld, en langzaam begonnen de dingen op hun plek te vallen. We begonnen aan te voelen wat mogelijk was en wat niet, en konden zo telkens dichter bij de werkelijkheid komen. Helaas, zoals bij elke reis, moet je op een gegeven moment weer terug naar huis. De tijd is op, het was mooi, maar nu weer terug. Gelukkig blijven de herrinneringen aan de plaatsen en aan de mensen. Want op deze reis kwamen wij genoeg mensen tegen, die ons geholpen hebben met het vinden van de juiste paden. We hadden ten eerste een geweldige gids, Sven Aerts, die ons behoede voor derdegraadswortels wanneer een vierkantswortel nodig was en altijd binnen vijf minuten een antwoord had op elke mogelijke vraag. Hij heeft het zelfs voor elkaar gekregen om vriendelijk en goedgehumeurd te blijven tijdens de stortvloed aan vragen die wij over hem heen hebben gekieperd. Om ons heen, hoorden wij van andere reizigers in andere landen die te weinig input kregen van hun gids maar over input hoefden wij niet te klagen. Zo werden wij rondgeleid door deze wereld en kwamen wij nog andere hulptroepen tegen. Zo was Nico Markus bereid zijn innig geliefde camera een weekend aan ons uit te lenen. Erik-Jan Koeman was de persoon die ons aanspoorde deze reis überhaubt te ondernemen, en Estevan Veenstra spoorde ons op de juiste momenten aan om verder te trekken door onze wereld. En nu zijn we dan aangekomen aan het einde van onze reis. We hebben veel gezien, veel nieuwe dingen opgesnoven, en veel geleerd maar zoals bij elke reis is het ook heerlijk om weer thuis te zijn.
52
Referenties Bourke, P (1988). The shortest line between two lines in 3D Geraadpleed op: 25-12-2013 http://paulbourke.net/geometry/pointlineplane/ Dawkins, P (2014). Arc Length Geraadpleed op:05-02-2014 http://tutorial.math.lamar.edu/Classes/CalcIII/VectorArcLength.aspx Dima, C (1988). Matlab conversie voor: The shortest line between two lines in 3D Geraadpleed op: 25-12-2013 http://paulbourke.net/geometry/pointlineplane/linelineintersect.m Dirkse, D (z.d.) De Kleinste Kwadraten Methode http://www.davdata.nl/klkw.html Dirks, D (z.d.) Lineaire Regressie Geraadpleed op: 05-10-2013 http://www.davdata.nl/linregressie.html Staal (2012). Historische vindingen: Wis- en Natuurkunde – Pythagoras Geraadpleed op: 21-08-2013 http://wetenschap.infonu.nl/wiskunde/97972-historische-vindingen-wis-en-meetkunde.html Weisstein, Eric W.(z.d.) ‘’Cross Product’’ From Mathworld Geraadpleed op: 03-01-2014 http://mathworld.wolfram.com/CrossProduct.html Wikipedia (z.d.) Booglengte Geraadpleed op: 05-02-2014 http://nl.wikipedia.org/wiki/Booglengte Wikipedia (z.d.). Adobe After Effects Geraadpleed op: 14-08-2013 http://nl.wikipedia.org/wiki/Adobe_After_Effects Wikipedia (z.d.) Matrix Laboratory Geraadpleed op:17-11-2013 http://nl.wikipedia.org/wiki/MATLAB Wikipedia (z.d.). Bend it like Beckham Geraadpleed op:20-03-2013 http://nl.wikipedia.org/wiki/Bend_It_Like_Beckham Website bedrijf: About Hawk Eye Geraadpleed op: 23-05-2013 http://www.hawkeyeinnovations.co.uk/page/about-hawk-eye Adobe Community Help. Meerdere malen geraadpleegd http://helpx.adobe.com Gazet van Antwerpen (2008). Oefen 10.000 uren en word een genie Geraadpleed op: 06-07-2013 http://www.gva.be/nieuws/wetenschap/oefen-10-000-uren-en-word-een-genie.aspx Mathworks, user community. Meerdere malen geraadpleegd http://www.mathworks.nl/matlabcentral/?s_tid=gn_mlc
53
Microsoft Office (2014). CORRELATIE Geraadpleed op: 11-02-2014 http://office.microsoft.com/nl-nl/excel-help/correlatie-HP005209023.aspx Gebruikte software: Adobe After Effects CS5.5 Adobe Premiere Pro CS5.5 Adobe Photoshop CS5 Autodesk Autocad 2014 Mathworks MATLAB 7.12.0 Microsoft Office Word 2010 Microsoft Office Excel 2013
54
Bijlages Bijlage 1: Matlab programma Eerst zullen we ons programma stap voor stap doorlopen om uit te leggen wat er gedaan wordt. Vervolgens zullen wij het volledige script plaatsen. clearvars -except data
Hiermee worden alle bestaande waardes vernietigd, behalve de waarden die onder het kopje data staan. In ons geval staan de opgenomen waardes van de bal onder data. ry1 = 0.129335 ry2 = 0.006336003 yrotatie=[cos(ry1) -sin(ry1) 0; sin(ry1) cos(ry1) 0; 0 0 1] ygrotatie=yrotatie^-1 yrotatie2=[cos(ry2) 0 -sin(ry2);0 1 0; sin(ry2) 0 cos(ry2)] ygrotatie2=yrotatie2^-1 yrotatienfin=ygrotatie*ygrotatie2 rx1 = 0.043889499 rx2 = 0.000411234 xrotatie=[cos(rx1) -sin(rx1) 0; sin(rx1) cos(rx1) 0; 0 0 1] xgrotatie=xrotatie^-1 xrotatie2=[1 0 0;0 cos(rx2) -sin(rx2);0 sin(rx2) cos(rx2)] xgrotatie2=xrotatie2^-1 xrotatienfin=xgrotatie*xgrotatie2
Hier worden de rotatiematrixen die als correctie gebruikt worden opgesteld. Ry1, ry2, rx1 en rx2 zijn de bepaalde draaiingshoeken. for x=1:data(1,6) Dit geeft aan hoe vaak er geitereerd wordt. Het aantal frames per schot staat in elk excel file in de eerste rij, zesde kolom. Daar verwijst data(1,6) naar. a=data(x,2) b=data(x,3) c=data(x,4) d=data(x,5)
Hier worden de door After Effects bepaalde waardes geimporteerd en toegewezen. De eerste x geeft aan uit welke rij de waardes geïmporteerd zijn. Doordat er van 1 tot 24 wordt geitereerd worden eerst de waardes uit de eerste rij, en de eerste 4 kolommen gepakt. Daarmee wordt het programma doorlopen. Vervolgens worden de gegevens uit de volgende rij gepakt etc.
p1=[28.2 0 1.4]' p5=[(a-644) 1692.36 (485-b)]' p3=[0 39 1.4]' p6=[1692.36 (720-c) (520-d)]' Hier worden de waardes uit after effects omgezet tot vectoren. p8=xrotatienfin*p5
55
p7=yrotatienfin*p6
Hier wordt de correctie met de draiiings matrixen uitgevoerd. p2=(0.029544541*p8) + p1 p4=(0.029544541*p7) + p3
De lijnen waartussen we het “snijpunt” zoeken worden gevormd door lijn1(de lijn tussen p1 en p2) en lijn2(de lijn tussen p3 en p4). p13(1) = p1(1) - p3(1); p13(2) = p1(2) - p3(2); p13(3) = p1(3) - p3(3); p43(1) = p4(1) - p3(1); p43(2) = p4(2) - p3(2); p43(3) = p4(3) - p3(3); if ((abs(p43(1)) < eps) & ... (abs(p43(2)) < eps) & ... (abs(p43(3)) < eps)) error('Could not compute LineLineIntersect!'); end p21(1) = p2(1) - p1(1); p21(2) = p2(2) - p1(2); p21(3) = p2(3) - p1(3); if ((abs(p21(1)) < eps) & ... (abs(p21(2)) < eps) & ... (abs(p21(3)) < eps)) error('Could not compute LineLineIntersect!'); end d1343 d4321 d1321 d4343 d2121
= = = = =
p13(1) p43(1) p13(1) p43(1) p21(1)
* * * * *
p43(1) p21(1) p21(1) p43(1) p21(1)
+ + + + +
p13(2) p43(2) p13(2) p43(2) p21(2)
* * * * *
p43(2) p21(2) p21(2) p43(2) p21(2)
+ + + + +
p13(3) p43(3) p13(3) p43(3) p21(3)
denom = d2121 * d4343 - d4321 * d4321; if (abs(denom) < eps) error('Could not compute LineLineIntersect!'); end numer = d1343 * d4321 - d1321 * d4343; mua = numer / denom; mub = (d1343 + d4321 * mua) / d4343;
56
* * * * *
p43(3); p21(3); p21(3); p43(3); p21(3);
pa(1) pa(2) pa(3) pb(1) pb(2) pb(3)
= = = = = =
p1(1) p1(2) p1(3) p3(1) p3(2) p3(3)
+ + + + + +
mua mua mua mub mub mub
* * * * * *
p21(1); p21(2); p21(3); p43(1); p43(2); p43(3);
Dit gedeelte berekent het korste lijnstuk tussen lijn 1 en lijn 2 volgens de methode beschreven in het hoofddtuk balbaan reconstructie. Dit gedeelte van de code is overgenomen van:http://paulbourke.net/geometry/pointlineplane/linelineintersect.m Deze code is geschreven door Cristian Dima. De theorie is geschreven door Paul Bourke muc = [p1+mua*(p2 - p1)+(1/2)*((p3 + mub*(p4 - p3))-(p1 + mua*(p2 p1)));]'
Hier wordt muc geintroduceert. Muc is het midden van het hiervoor gevonden kortste lijnstuk. mucx(x,1)=muc(1,1) mucy(x,1)=muc(1,2) mucz(x,1)=muc(1,3)
Hier wordt muc opgesplitst in een x,y en z waarde. Deze verschillende waardes worden opgeslagen waarbij elke nieuwe muc waardes in de rij onder die daarvoor worden geplaatst end
Het itereren wordt beeindigt. t=(1:1:x)
Hier wordt begonnen met een nieuwe iteratie. ux=fit(t',mucx , 'poly3') uy=fit(t',mucy , 'poly3') uz=fit(t',mucz , 'poly3')
Er wordt nu gezocht naar de best passende derdegraadspolynomen voor afzonderlijk de x-,y- en z-waardes van muc. aax=polyfit(t',mucx , 3) aay=polyfit(t',mucy , 3) aaz=polyfit(t',mucz , 3)
Hier gebeurt hetzelfde, alleen nu is de output de coëfficienten. Het is nodig om dit nog een keer te doen omdat de de eerste output niet geplot kan worden. for i=1:x aaxx(i,1)=aax(1,1)*i.^3 + aax(1,2)*i^2 + aax(1,3)*i + aax(1,4) aayy(i,1)=aay(1,1)*i.^3 + aay(1,2)*i^2 + aay(1,3)*i + aay(1,4) aazz(i,1)=aaz(1,1)*i.^3 + aaz(1,2)*i^2 + aaz(1,3)*i + aaz(1,4)
57
Vervolgens worden de waardes van de functies berekend waarbij i van 0 tot het laatste frame loopt. end plot3(aaxx, aayy, aazz)
Nu worden de functies geplot. Dit is dus de benaderde balbaan aaxa1(1,1)=aax(1,1)*3 aaxa1(1,2)=aax(1,2)*2 aaxa1(1,3)=aax(1,3) aaxa2(1,1)=2*aaxa1(1,1) aaxa2(1,2)=1*aaxa1(1,2)
Zo worden de coëfficienten van de afgeleiden en tweede afgeleide van de functies die de balbaan beschrijven bepaalt. Dit gebeurt volgens de standaard regels van het afleiden syms T
Hier wordt de variabele T ingevoerd. fx=aax(1,1)*T.^3 + aax(1,2)*T.^2 + aax(1,3)*T + aax(1,4) fy=aay(1,1)*T.^3 + aay(1,2)*T.^2 + aay(1,3)*T + aay(1,4) fz=aaz(1,1)*T.^3 + aaz(1,2)*T.^2 + aaz(1,3)*T + aaz(1,4)
Nu gebeurt hetzelfde als al eerder gebeurt is bij aaxx, aayy en aazz maar dit keer worden er geen getallen gebruikt maar een variabele. dfx=diff(fx) dfy=diff(fy) dfz=diff(fz)
Matlab krijgt de opdracht de functies te differentieren. f=sqrt(dfx^2+dfy^2+dfz^2)
De intergraal hiervan is de formule voor de booglengte. fi=int(f, 0, data(1,6))
Nu wordt de integraal tussen 0 en de waarde van het laatste frame genomen. Matlab geeft een foutmelding als dit wordt ingevoerd omdat matlab het niet exact kan berekenen. Daardoor wordt deze integraal aan fi toegewezen. vpa(fi, 5)
Zo geven we matlab de opdracht de foutmelding te negeren en het af te ronden op 5 significante cijfers. ans/data(1,6)
We delen de afstand in meters door het aantal frames. Zo krijgen we de snelheid in m/frame. afgeleide=(diff(fx,2)/diff(fy,2))
We introduceren een nieuwe variabele: afgeleide. Dit is de dubbele afgeleide van f(y) naar de tijd, gedeeld door de dubbele afgeleide van f(x) naar de tijd. opp=int(afgeleide, 0, data(1,6))
58
We berekenen hier de integraal van over het interval 0:laatste frame. Nu zal matlab opnieuw een foutmelding geven. abs(vpa(opp, 5)) Zo geven we matlab opnieuw de opdracht de foutmelding te negeren en het af te ronden op 5 significante cijfers. Met abs geven we MATLAB de opdracht de absolute waarde van het antwoord te nemen zodat er geen negatieve oppervlaktes ontstaan.
Bijlage 2: De opstelling
Bovenaanzicht van het veld
59
achter de camera op de y-as
achter de camera op de x-as
60
Bijlage 3: De correlatie-tabellen Curve
1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763
Curve
rotatie
0.1257 0.1234 0.106 0.128 0.1106 0.0957 0.09554 0.1088875 0.09088
Correlatie 0.379719
rotatie 1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763 0.744639243 0.865780551 0.866511296 0.868500799 0.985910204 0.74308157
Curve
Correlatie 0.1257 -0.16697 0.1234 0.106 0.128 0.1106 0.0957 0.09554 0.1088875 0.09088 0.1145375 0.1194 0.104722222 0.154866667 0.116225 0.171963636
rotatie 1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763 0.744639243 0.865780551 0.866511296 0.868500799 0.985910204 0.74308157 0.957040106 1.156651925 1.303392691
0.1257 0.1234 0.106 0.128 0.1106 0.0957 0.09554 0.1088875 0.09088 0.1145375 0.1194 0.104722222 0.154866667 0.116225 0.171963636 0.097633333 0.121057143 0.106026667
Correlatie -0.15748
61
Curve 1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763
rotatie/snelheid Correlatie 0.199548947 0.586801 0.180936768 0.159232822 0.17695934 0.140962062 0.131679165 0.10175422 0.144497537 0.109115603
1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763 0.744639243 0.865780551 0.866511296 0.868500799 0.985910204 0.74308157
rotatie/snelheid Correlatie 0.199548947 0.612844 0.180936768 0.159232822 0.17695934 0.140962062 0.131679165 0.10175422 0.144497537 0.109115603 0.100639341 0.111270864 0.087277689 0.118714027 0.096974156 0.15636993
Curve
Curve rotatie/snelheid Correlatie 1.777098281 0.199548947 0.612844 1.14732011 0.180936768 1.527812692 0.159232822 1.011636101 0.17695934 1.579972698 0.140962062 1.278359218 0.131679165 0.747427867 0.10175422 0.870053172 0.144497537 0.918980763 0.109115603 0.744639243 0.130354977 0.865780551 0.128123028 0.866511296 0.125653463 0.868500799 0.20202907 0.985910204 0.139297429 0.74308157 0.189112396 0.957040106 0.122357836 1.156651925 0.158836739 1.303392691 0.140884173
62
Curve 1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763 Curve 1.777098281 1.14732011 1.527812692 1.011636101 1.579972698 1.278359218 0.747427867 0.870053172 0.918980763 0.744639243 0.865780551 0.866511296 0.868500799 0.985910204 0.74308157
rotatie/snelheid^2 Correlatie 0.316784265 0.646804 0.265300761 0.239198976 0.244645374 0.179659158 0.181184979 0.108372633 0.191753308 0.131010286 rotatie/snelheid^2 Correlatie 0.316784265 0.57021 0.265300761 0.239198976 0.244645374 0.179659158 0.181184979 0.108372633 0.191753308 0.131010286 0.148356826 0.137483336 0.150768312 0.2635541 0.166950086 0.207971285
Curve rotatie/snelheid^2 Correlatie 1.777098281 0.316784265 0.560466 1.14732011 0.265300761 1.527812692 0.239198976 1.011636101 0.244645374 1.579972698 0.179659158 1.278359218 0.181184979 0.747427867 0.108372633 0.870053172 0.191753308 0.918980763 0.131010286 0.744639243 0.148356826 0.865780551 0.137483336 0.866511296 0.150768312 0.868500799 0.2635541 0.985910204 0.166950086 0.74308157 0.207971285 0.957040106 0.153343531 1.156651925 0.208406618 1.303392691 0.187201492 63
Bijlage 4: Controle voorspelling Gemeten c Voorspelde c Verschil
Som van rij erboven Gemiddelde rij Afwijking in procenten
Modulus verschil
17.771
17.002
0.0769
0.0769
11.473
13.569
-0.2096
0.2096
15.278
15.871
-0.0593
0.0593
10.116
11.279
-0.1163
0.1163
1.58
11.187
0.4613
0.4613
12.784
1.281
-0.0026
0.0026
0.7474
0.7595
-0.0121
0.0121
0.8701
11.963
-0.3262
0.3262
0.919
0.9395
-0.0205
0.0205
0.7446
0.9712
-0.2266
0.2266
0.8658
0.8584
0.0074
0.0074
0.8665
10.549
-0.1884
0.1884
0.8685
0.8932
-0.0247
0.0247
0.9859
10.118
-0.0259
0.0259
0.7431
0.7916
-0.0485
0.0485
0.957
10.909
-0.1339
0.1339
11.567
1.083
0.0737
0.0737
13.034
12.098
0.0936
0.0936
19,3502 -0,6817 1,075011 -0,03787
2,1075 0,117083 10,52072
20,0319 1,112883
64
Bijlage 5: Betrouwbaarheid balbaan
Schot 12, camera x-as 800 Gemeten baan
700
y-waarde
600 gereconstrueerd zonder draaiingsmatrixen
500 400
gereconstrueerd met draaiingsmatrixen
300 200 100 0 0
200
400
600
800
1000
1200
1400
1600
x-waarde
Schot 12, camera y-as 900 800 gemeten 700
y-waarde
600
gereconstrueerd inclusief draaiingsmatrixen gereconstrueerd exclusief draaiingsmatrixen
500 400 300 200 100 0 0
200
400
600
800
x-waarde
65
1000
1200
1400
66
“Als ik zou willen dat je het begreep, had ik het wel beter uitgelegd.” Johan Cruijff Nederlands voetballer en coach 1947
67