Come fa un telefono a contare i propri looping
Looping non ha bisogno né di fotocamera né di arbitro: il telefono misura il proprio lancio. Ecco cosa succede tra il momento in cui lascia la tua mano e quello in cui compare il punteggio.
Due sensori che ogni telefono ha a bordo
Un accelerometro misura le forze che il telefono subisce. Appoggiato su un tavolo, legge l'attrazione della gravità, circa 9,8 m/s². Un giroscopio misura la velocità con cui il telefono ruota attorno a ciascuno dei suoi tre assi, in gradi al secondo.
Entrambi sono finiti nei telefoni per ruotare lo schermo, contare i passi e stabilizzare le foto. Looping li legge dal browser, decine di volte al secondo.
Riconoscere il volo
Nell'istante in cui il telefono lascia la tua mano, niente lo spinge più. È in caduta libera, in salita come in discesa, e l'accelerometro non legge quasi più nulla. Quel silenzio improvviso è la firma di un volo. Finisce con un picco netto, quando una mano o il materasso ferma il telefono.
Un telefono che gira confonde le acque: il suo accelerometro non sta esattamente al centro, quindi è la rotazione stessa a premerci sopra. Per questo il gioco non cerca un semplice zero. Verifica che ciò che legge l'accelerometro sia esattamente ciò che spiega la rotazione misurata dal giroscopio. Un telefono scosso in mano, o fatto girare su un tavolo, non supera questa prova.
Un volo deve durare almeno 0,3 secondi per contare: circa undici centimetri di salita, abbastanza per distinguere un lancio da un tic della mano.
Contare i giri
Durante il volo, il giroscopio fornisce la velocità di rotazione molte volte al secondo. Moltiplica ogni lettura per il tempo che copre, somma tutto e ottieni l'angolo totale di cui è ruotato il telefono, qualunque sia l'asse: ribaltandosi su se stesso come una moneta (una capriola), attorno al suo asse lungo (un tonneau) o di piatto come una trottola (una rotazione piatta).
Un looping sono 360°. Il numero sullo schermo è quello dei giri completi, e un giro conta dall'80% in su. Chi guarda un lancio vede circa un quinto di giro in più di quanto ne contenga il volo libero, perché il telefono ruota già in mano al rilascio e ruota ancora alla presa. La classifica, invece, si gioca sull'angolo totale, fino all'ultimo grado.
Da dove viene l'altezza
Il gioco non vede il soffitto: cronometra il volo. Un oggetto lanciato verso l'alto e ripreso alla stessa altezza passa metà del suo tempo in aria a salire e metà a scendere, e da qui si ricava l'altezza: 0,5 s in aria sono circa 30 cm, 0,75 s circa 70 cm, un secondo circa 1,2 m.
È una stima. Se riprendi il telefono più in basso di dove l'hai lanciato, la cifra ti lusinga un po'.
Quando il sensore non tiene il passo
Ogni giroscopio ha un tetto: una velocità di rotazione oltre la quale risponde sempre lo stesso numero. Abbiamo misurato circa 1.150 °/s su alcuni telefoni Android, 2.300 °/s su altri e 4.000 °/s su un iPhone recente, cioè undici giri al secondo.
Quando un lancio supera il tetto, il gioco non si inventa i giri che mancano. Tiene il minimo che ha misurato davvero e lo dice nel risultato, oppure rifiuta il lancio quando non può garantire nulla. Un punteggio può essere più basso della realtà; più alto, mai.
Perché il punteggio lo tiene il server
Il tuo telefono registra il lancio; non lo giudica. Le misure grezze vanno al server del gioco, che calcola il punteggio con le stesse regole per tutti e verifica che descrivano un vero volo libero. Una registrazione può contare una volta sola.
È questo che rende affidabile una classifica: nessuno può inviare un numero, soltanto un lancio. Senza rete, il lancio viene conservato sul telefono (fino a dodici, per sette giorni) e contato quando torna la connessione.
Che cosa legge il gioco, e che cosa no
Looping legge i sensori di movimento e nient'altro: niente fotocamera, niente microfono, niente posizione. Che cosa viene registrato, e per quanto tempo, è scritto nelle note legali.
Gioca a LoopingPer saperne di più
English Français Español Português Deutsch Italiano Nederlands Polski Türkçe Русский Українська العربية हिन्दी বাংলা Bahasa Indonesia Tiếng Việt ไทย 日本語 한국어 中文