ОК. Я нашел что-то, что, кажется, работает, но у меня все еще есть некоторые проблемы.Вот как я продолжаю (допуская, что устройство удерживается вертикально):
1 - у меня есть значения по умолчанию x, y и z.2 - Я извлекаю вектор гравитации из этих данных, используя фильтр низких частот.3 - Я вычленяю нормализованный гравитационный вектор из каждого x, y и z и получаю ускорение движения.4 - Затем я интегрирую это значение ускорения по времени, чтобы получить скорость.5 - Я снова интегрирую эту скорость по времени и нахожу позицию.
Весь приведенный ниже код входит в акселерометр: didAccelerate: делегат моего контроллера.Я пытаюсь заставить шар двигаться в соответствии с положением, которое я нашел.Вот мой код:
NSTimeInterval interval = 0;
NSDate *now = [NSDate date];
if (previousDate != nil)
{
interval = [now timeIntervalSinceDate:previousDate];
}
previousDate = now;
//Isolating gravity vector
gravity.x = currentAcceleration.x * kFileringFactor + gravity.x * (1.0 - kFileringFactor);
gravity.y = currentAcceleration.y * kFileringFactor + gravity.y * (1.0 - kFileringFactor);
gravity.z = currentAcceleration.z * kFileringFactor + gravity.z * (1.0 - kFileringFactor);
float gravityNorm = sqrt(gravity.x * gravity.x + gravity.y * gravity.y + gravity.z * gravity.z);
//Removing gravity vector from initial acceleration
filteredAcceleration.x = acceleration.x - gravity.x / gravityNorm;
filteredAcceleration.y = acceleration.y - gravity.y / gravityNorm;
filteredAcceleration.z = acceleration.z - gravity.z / gravityNorm;
//Calculating velocity related to time interval
velocity.x = velocity.x + filteredAcceleration.x * interval;
velocity.y = velocity.y + filteredAcceleration.y * interval;
velocity.z = velocity.z + filteredAcceleration.z * interval;
//Finding position
position.x = position.x + velocity.x * interval * 160;
position.y = position.y + velocity.y * interval * 230;
Если я выполню это, я получу довольно хорошие значения, я имею в виду, что ускорение может перейти в положительные или отрицательные значения в соответствии с движениями, которые я делаю.Но когда я пытаюсь применить эту позицию к своему виду шара, я вижу, что он движется, но с большей склонностью идти в одном направлении больше, чем в другом.Это означает, например, что если я нарисую круги с помощью своего устройства, я увижу шар, описывающий кривые, к левому верхнему углу экрана.Что-то в этом роде: http://img685.imageshack.us/i/capturedcran20100422133.png/
У вас есть идеи о том, что происходит?Заранее спасибо!