Algoritmo per rilevare un gesto che gira la manopola?

4

Qual è la matematica per identificare un gesto per il movimento fatto con due dita che ruotano una manopola (tenendo traccia di due set per xycoords)?

C'è una biblioteca / api a cui tutti hanno familiarità con una buona libreria di gesti per le applicazioni multitouch?

    
posta jamesson 24.09.2011 - 14:09
fonte

2 risposte

3

La matematica con due dita (supponendo che alcune API ti diano sempre il centro di entrambe le dita) è piuttosto semplice, ma ottieni più di una semplice svolta. Si ottiene il ridimensionamento e la traslazione del movimento. Star con P1 (0) (x1 (0), Y1 (0)) e P2 (0) (x2 (0), Y2 (0)). Quindi calcola Pc = (P1 + P2) / 2. Dopodiché regola tutte le coordinate successive in modo tale che Pc (centro) sia a (0, 0) sottraendo Pc da ogni punto. Dopodiché dovresti essere in grado di calcolare il modo in cui ciascuna delle dita ruotava attorno al centro: quanto ridimensionava e quanto girava con ogni passo. Si noti che l'utente potrebbe aver fatto scorrere entrambe le dita. Pensa guardando un uragano in movimento su uno schermo radar: si gira, si muove, si disperde e si allarga o diventa più piccolo. Se quel movimento scorrevole è significativo, potresti voler calcolare dinamicamente il centro.

Ora, con N misurazioni di coppie di punti P1 e P2, dovresti avere dati su come il centro scorreva, come girava e come cambiava il raggio. Stai cercando una piccola espansione scorrevole, un raggio ridotto e un aumento / diminuzione lineare dell'angolo con il tempo. Vorrei filtrare un grande rumore e quindi provare a vedere come si può adattare una linea retta nel grafico dell'angolo, e quanto bene una linea lo approssima. Bene ... l'utente può cambiare la velocità di rotazione. Qualcosa che nessuna biblioteca generica può fare per te è decidere le regole per quando ignorare un gesto. È necessario fornire maggiori informazioni su come è la rotazione della manopola. Spero che ci siano solo 2 dita coinvolte. Stai provando a misurare questa svolta o semplicemente a rilevare il movimento?

EDIT: Pensando all'uragano un po 'di più, penso che abbia senso calcolare il nuovo centro ad ogni passo. Tuttavia, se un dito non si muove, ma l'altro traccia un cerchio, allora è un tipo diverso di movimento rispetto al girare la manopola. Se lo si modella ancora come una manopola, verrà interpretato come spostamento con rotazione lenta anziché rotazione più veloce attorno a un punto statico.

Ancora una volta, la matematica non è necessariamente complicata. È solo una matrice di trasformazione 2d + vettore di offset. Ma quando più di un dito è coinvolto, la domanda diventa: qual è il "centro" su cui viene eseguita la trasformazione? Potrebbe essere 4 angoli dello schermo, il centro del dito 1, il centro del dito 2, il punto intermedio tra due dita o altro. Il modo in cui interpreti il movimento dipenderà dalla scelta del centro. Potrebbe non avere molta importanza se gli utenti possono facilmente apprendere e modificare il proprio movimento per farlo funzionare correttamente. Ma vuoi comunque fare la migliore ipotesi su come stanno pianificando esattamente l'uso del software e quali altri gesti ci sono.

    
risposta data 24.09.2011 - 15:32
fonte
0

È facile complicare troppo.

Devi acquisire e indicare 4 idee semplici

  1. hanno afferrato la manopola

  2. hanno iniziato a cogliere all'angolo a

  3. ora hanno la presa con l'angolo b

  4. hanno rilasciato la manopola

Mostra 1 evidenziando la manopola

Mostra 2 e 3 ruotando la manopola a-b gradi.

Mostra 4 rimuovendo l'evidenziazione

(1) dovrebbe accadere solo quando una linea tracciata dal dito al dito interseca la manopola. Una volta che questo accade ...

(2) l'angolo a è impostato

(3) b viene continuamente ripristinato mentre muovono le dita. Questo continua finché non li rimuovono o la linea non interseca più la manopola.

(4) lascia la manopola in cui è stata ruotata.

Questo è diverso quindi manipolando un'immagine con due dita solo in quanto non è consentito alcun allungamento o traslazione. Solo rotazione.

    
risposta data 05.06.2017 - 16:08
fonte

Leggi altre domande sui tag