Sto provando a rilevare un movimento verso l'alto sul mio dispositivo Android, ma sto trovandolo abbastanza difficile. Ho scritto il seguente codice, e funziona per tutto il movimento improvviso (cioè accelerazione veloce) su tutte le direzioni. Tuttavia, mi piacerebbe che funzioni solo per un improvviso movimento verso l'alto. Qualsiasi aiuto è molto apprezzato.Rilevamento improvviso movimento verso l'alto in Android
public void onSensorChanged(SensorEvent event) {
// alpha is calculated as t/(t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8f;
gravity = new float[3];
linear_acceleration = new float[3];
linear_acceleration_old = new float[3];
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
System.out.println(linear_acceleration[0] + " "
+ linear_acceleration[1]+" " +linear_acceleration[2]);
//detects swift movements, but I want to detect only upward ones
if((Math.abs(linear_acceleration[1] - linear_acceleration_old[1]) > 10.0f
&& Math.abs(linear_acceleration[2] - linear_acceleration_old[2]) > 5.0f)
|| isFirstEvent) {
if(!isFirstEvent)
//do something
linear_acceleration_old[0] = linear_acceleration[0];
linear_acceleration_old[1] = linear_acceleration[1];
linear_acceleration_old[2] = linear_acceleration[2];
isFirstEvent= false;
}
}
Non capisco davvero cosa si sta facendo, ma dal momento che si inizializza linear_acceleration_old nella parte superiore del metodo è pieno di valori zero quando lo si fa ((Math.abs (linear_acceleration [1] - linear_acceleration_old [1 ])> 10.0f ecc. Potresti inserire l'inizializzazione nel costruttore della classe.Alcuni punti per la gravità, infatti non so se questo da solo farà funzionare il tuo codice però! –
grazie james. Non sono del tutto sicuro di quello che sto donando.La mia idea era di rilevare una differenza nell'accelerazione vecchia e attuale, e se questo delta è sufficientemente grande, quindi innescare un evento, tuttavia, non sono del tutto sicuro .. – OckhamsRazor