Hoe een telefoon zijn eigen loopings telt
Looping heeft geen camera en geen scheidsrechter nodig: de telefoon meet zijn eigen worp. Dit gebeurt er tussen het moment dat hij je hand verlaat en het moment dat de score verschijnt.
Twee sensoren die in elke telefoon zitten
Een accelerometer meet de krachten die de telefoon voelt. Ligt hij op tafel, dan meet hij de zwaartekracht, ongeveer 9,8 m/s². Een gyroscoop meet hoe snel de telefoon om elk van zijn drie assen draait, in graden per seconde.
Allebei zitten ze in telefoons om het scherm mee te laten draaien, stappen te tellen en foto's te stabiliseren. Looping leest ze via de browser, tientallen keren per seconde.
De vlucht herkennen
Zodra de telefoon je hand verlaat, duwt er niets meer tegen. Hij is in vrije val, op weg omhoog net zo goed als op weg omlaag, en de accelerometer meet bijna niets meer. Die plotselinge stilte is de handtekening van een vlucht. Die eindigt met een scherpe piek, wanneer een hand of het matras de telefoon stopt.
Een draaiende telefoon vertroebelt het beeld: zijn accelerometer zit niet precies in het midden, dus de draaiing zelf drukt erop. Het spel zoekt daarom niet naar een simpele nul. Het controleert of wat de accelerometer meet precies overeenkomt met wat de door de gyroscoop gemeten draaiing verklaart. Een telefoon die in de hand wordt geschud of op een tafel wordt rondgedraaid, komt niet door die test.
Een vlucht moet minstens 0,3 seconde duren om te tellen: ongeveer elf centimeter omhoog, genoeg om een worp van een trekje van de hand te onderscheiden.
De draaien tellen
Tijdens de vlucht geeft de gyroscoop vele keren per seconde de draaisnelheid door. Vermenigvuldig elke meting met de tijd die ze beslaat, tel alles op, en je krijgt de totale hoek die de telefoon heeft afgelegd, om welke as dan ook: over de kop (een salto), om zijn lengteas (een rol) of plat als een tol (een platte draai).
Eén looping is 360°. Het getal op het scherm is het aantal volledige draaien, en een draai telt vanaf 80%. Wie naar een worp kijkt, ziet ongeveer een vijfde draai meer dan er in de vrije vlucht zit, omdat de telefoon bij het loslaten al in de hand draait en bij het vangen nog steeds. De ranglijst kijkt juist naar de totale rotatie, tot op de graad nauwkeurig.
Waar de hoogte vandaan komt
Het spel ziet het plafond niet: het klokt de vlucht. Iets wat omhoog wordt gegooid en op dezelfde hoogte wordt gevangen, stijgt de helft van zijn vluchttijd en daalt de andere helft, en daaruit volgt de hoogte: 0,5 s in de lucht is ongeveer 30 cm, 0,75 s ongeveer 70 cm, één seconde ongeveer 1,2 m.
Het is een schatting. Vang je de telefoon lager dan waar je hem losliet, dan vleit het getal je een beetje.
Als de sensor het niet meer bijhoudt
Elke gyroscoop heeft een limiet: een draaisnelheid waarboven hij steeds hetzelfde getal blijft geven. We maten ongeveer 1.150 °/s op sommige Android-telefoons, 2.300 °/s op andere en 4.000 °/s op een recente iPhone, oftewel elf draaien per seconde.
Gaat een worp over de limiet, dan verzint het spel de ontbrekende draaien niet. Het houdt het minimum aan dat het echt heeft gemeten en zegt dat erbij in het resultaat, of het weigert de worp als het niets kan garanderen. Een score kan lager zijn dan de werkelijkheid; hoger is hij nooit.
Waarom de server de score bijhoudt
Je telefoon neemt de worp op; hij beoordeelt hem niet. De ruwe metingen gaan naar de server van het spel, die de score voor iedereen met dezelfde regels berekent en controleert of de metingen een echte vrije vlucht beschrijven. Een opname kan maar één keer tellen.
Dat maakt een ranglijst betrouwbaar: niemand kan een getal insturen, alleen een worp. Zonder netwerk wordt de worp op de telefoon bewaard (maximaal twaalf, zeven dagen lang) en geteld zodra de verbinding terug is.
Wat het spel leest, en wat niet
Looping leest de bewegingssensoren en verder niets: geen camera, geen microfoon, geen locatie. Wat er wordt bewaard, en hoe lang, staat in de juridische informatie.
Looping spelenMeer lezen
English Français Español Português Deutsch Italiano Nederlands Polski Türkçe Русский Українська العربية हिन्दी বাংলা Bahasa Indonesia Tiếng Việt ไทย 日本語 한국어 中文