Sto osservando un modo semplice e programmatico per rilevare se l'utente ha disegnato o meno una forma circolare. Sto lavorando in C, ma sono felice di lavorare con lo pseudo-codice. Un po 'di Google utilizza un numero di metodi (auspicabilmente) eccessivamente complessi.Rilevamento di un semplice gesto circolare
Sto monitorando le coordinate del mouse come float e ho creato una serie di vettori per tracciare il movimento del mouse nel tempo. In sostanza sto cercando di rilevare quando un cerchio è stato disegnato e quindi di eliminare tutti i dati di movimento non associati a quel cerchio.
Ho un idea di base di come questo potrebbe essere realizzato:
traccia tutti i movimenti che utilizzano una funzione polling. Ogni volta che la funzione viene interrogata, viene memorizzata la posizione corrente del mouse. Qui, passiamo in rassegna i dati storici di posizione e facciamo un approssimativo 'scatto alla posizione' per confrontare le due posizioni. Se la nuova posizione si trova a una distanza sufficiente da una vecchia posizione, rimuoviamo tutti i dati storici prima della vecchia posizione.
Mentre questo funziona in teoria, è un casino nella pratica. Qualcuno ha qualche suggerimento? Punti bonus se il metodo suggerito può rilevare se è stato disegnato in senso orario o antiorario.
Se il rilevamento dei gesti è l'argomento principale, in realtà andrei con una sorta di evento che attiva un timer. Attualmente sto lavorando su gesti personalizzati usando Qt e io uso la pressione del pulsante di un mouse come punto di partenza per la raccolta di campioni. Questo timer verrà quindi arrestato quando si verifica un altro evento specifico (ad esempio rilasciando il pulsante del mouse). Durante il punto di inizio e di fine del tempo, è possibile rilevare se il mouse si sta muovendo e raccogliere le posizioni del cursore. In questo modo avrai meno dati poveri più insiemi di punti ben definiti ciascuno descrivendo un movimento dall'inizio alla fine. – rbaleksandar