Я помещаю данные с акселерометра X в космический корабль, чтобы при наклоне телефона влево и вправо он вращался влево и вправо (слегка).
Я сделал соотношение, потому что я хочу, чтобы мой космический корабль вращался только наполовину, если телефон наклонен к -1 или 1 (полный наклон).
// accelerometer = Accelerometer::GetDefault();
// player->maxTitle = 0.5 (half of full accelerometer tilt)
double accelX = accelerometer->GetX();
player->currentRotation = ( accelX * player->maxTilt );
Первоначально это работало очень весело и плохо, поэтому у меня была игра с настройками интервалов, значительным улучшением, но все еще хлам … это довольно чувствительно сейчас.
accelerometer = Accelerometer::GetDefault();
int reportInterval = 16;
if( accelerometer->MinimumReportInterval > reportInterval )
{
accelerometer->ReportInterval = reportInterval;
}
Итак, я предполагаю, что мне нужно сделать что-то с низким фильтром, Винер фильтр? в сгладить значение … могу ли я иметь некоторые советы и подсказки по выполнению такой операции?
Я попробовал несколько формул, но у меня возникают трудности с их работой … http://forum.arduino.cc/index.php/topic,10716.0.html
Дискретный эквивалент фильтра нижних частот заключается в ограничении разницы между несколькими показаниями. Эта разница не должна быть слишком большой, иначе вы получите резкое поведение. Поэтому, если это так, игнорируйте значение акселерометра и подставьте предыдущее значение плюс максимально допустимую разницу.
Предположим, что показания 1 6 9 и максимальное изменение 4, вы заменили бы 6 на 5. Теперь различия стали 4 4 вместо 5 3, что на самом деле более плавно. Есть даже более плавные фильтры (использующие больше состояний), но это уже должно помочь.
Других решений пока нет …