Как измерить дистанцию, преодоленную iPhone во время свободного падения?

самый простой способ;

использовать DebugLog

Все журналы отключаются DebugLog при выпуске приложения.

https://github.com/MustafaFerhan/DebugLog

9
задан 2 July 2009 в 10:24
поделиться

10 ответов

Не верьте законам Ньютона, они игнорируют сопротивление воздуха, вращение Iphone и т. Д. Вместо этого используйте эмпирический подход. Позвольте устройству упасть с нескольких высот, например, 1 м, 2 м, 5 м, 10 м, 30 м ... Повторите несколько раз для каждой высоты. Каждую осень измеряйте время. Примерные результаты по сплайну. Вычислить обратную функцию.

10
ответ дан 4 December 2019 в 11:43
поделиться

The most simple and naive implementation is to sample the accelerometerdata and use the following formula.

v+=a*dt;
d+=v*dt;

But this is can give drift over time, read this for explanation why and a better solution: http://gafferongames.com/game-physics/integration-basics/

3
ответ дан 4 December 2019 в 11:43
поделиться

Также имейте в виду, что телефон ОЧЕНЬ вероятно упадет в любом случае падения. Когда профиль телефона изменится, сопротивление изменится, и акселерометр НЕ будет показывать ноль.

0
ответ дан 4 December 2019 в 11:43
поделиться

Одним из решений, которое учитывает проблему сопротивления ветра, является использование разницы между ускорением от силы тяжести и фактической нормой ускорения, которую вы читаете,

d 2 x / dt 2 = g - | a |

Где g = 9,8 и | a | = sqrt (a 1 2 + a 2 2 + a 3 2 ), где a n ] - это показания акселерометра на каждой оси.

Затем решите дифференциальное уравнение численно, с помощью чего-то вроде метода Эйлера.

Вы могли бы даже проявить смекалку и найти локальное значение g с помощью GPS.

1
ответ дан 4 December 2019 в 11:43
поделиться

Акселерометр будет показывать 0 (или g) по всем 3 осям, независимо от того, находится ли он в свободном падении или сидит на столе. Таким образом, вопрос спорный, поскольку невозможно определить расстояние без предположения о свободном падении.

-1
ответ дан 4 December 2019 в 11:43
поделиться

При старте с места

расстояние = 0,5 x ускорение x время 2

Ускорение свободного падения = 9,81 м / с 2

Я собираюсь Предположим, вы не роняете телефон достаточно далеко, чтобы достичь предельной скорости. Если вы это сделаете, я сомневаюсь, что ваше приложение будет очень полезно при восстановлении телефона :)

2
ответ дан 4 December 2019 в 11:43
поделиться

Это очень упрощенно, потому что вы должны учитывать трение воздуха. Трение воздуха заставляет устройство достигать предельной скорости. Только при предельной скорости акселерометр покажет 0.

Приведенные здесь формулы предполагают свободное падение в пустоте (без трения).

Другими словами, довольно сложно рассчитать пройденное расстояние (одна проблема заключается в том, что конечное расстояние) скорость зависит от ориентации телефона при падении).

0
ответ дан 4 December 2019 в 11:43
поделиться

расстояние = 0,5 * GravityAcceleration * timeOfFall 2

В простейшей форме.

Мы можем безопасно опустить трение воздуха и ветер, учитывая форм-фактор и вес iPhone, а также расстояния, с которых оборудование все еще будет полезно при падении. ;)

Однако, если вы собираетесь с телефоном в свободное падение, прежде чем раскрыть парашют, существует слишком много факторов, которые нужно учитывать, чтобы надежно рассчитать расстояние на основе самого акселерометра. Вероятно, он в любом случае не подходит для таких приложений, так как показания очень нестабильны, и его основная цель - определить ориентацию устройства или обнаружить потенциал свободного падения (в случае ноутбуков, где используются аналогичные микросхемы акселерометра).

0
ответ дан 4 December 2019 в 11:43
поделиться

Если ваши акселерометры показывают ноль, значит, у вас проблема с определением того, когда ваше движение завершилось.

Таким образом, определите замедление при ударе, затем определите максимальную скорость в начале замедления, а затем работайте в обратном направлении от этого. При условии линейного движения, отсутствия предельной скорости и сопротивления воздуха, линейного замедления (возможно) и того, что ваш телефон все еще работает!

2
ответ дан 4 December 2019 в 11:43
поделиться

Игнорирование сопротивления воздуха:

float t; // time since drop
float distance = 9.81f * 0.5f * t * t;

Для большего расстояния (падение с самолета) вы также можете использовать службы определения местоположения. CLLocation содержит высоту.

1
ответ дан 4 December 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: