04.06.2018 20:24
Сообщение от Юрий2011
Когда это в бытовухе были прецизионные датчики реально измеряющие углы до градусов, про десятые и в профи еще нужно поискать.
Как обычно. с помощью акселерометра.
...
Сначала вам нужно нормализовать вектор акселерометра.
То есть, если g – это вектор, возвращаемый значениями события датчика акселерометра. В коде
float[] g = new float[3]; g = event.values.clone(); double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]); // Normalize the accelerometer vector g[0] = g[0] / norm_Of_g g[1] = g[1] / norm_Of_g g[2] = g[2] / norm_Of_g
Тогда наклон можно рассчитать как
int inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2])));
таким образом
if (inclination < 25 || inclination > 155) { // device is flat } else { // device is not flat }
Для случая не плоского вращения (наклона) используется компас и рассчитывается следующим образом
int rotation = (int) Math.round(Math.toDegrees(Math.atan2(g[0], g[1])));
Гироскоп, по сути тот-же акселерометр, только шестиосевой.
С помощью гироскопа и акселерометра смартфоны могут считать шаги и даже определять собственное падение.