Не могу понять угол наклона расчета с помощью акселерометра на iPhone - PullRequest
3 голосов
/ 12 марта 2012
double = rollingZ  = acceleration.x;
double = rollingX = acceleration.y;

if (rollingZ > 0.0) {
    self.centerCoordinate.inclination = atan(rollingX / rollingZ) + M_PI / 2.0; //LINE 1
} 
else if (rollingZ < 0.0) {
    self.centerCoordinate.inclination = atan(rollingX / rollingZ) - M_PI / 2.0; // LINE 2
} 
else if (rollingX < 0) {
    self.centerCoordinate.inclination = M_PI/2.0; //atan returns a radian
} 
else if (rollingX >= 0) {
    self.centerCoordinate.inclination = 3 * M_PI/2.0;

Я просто пытаюсь полностью понять этот кусок кода. Я собираюсь создавать приложения AR на iphone, и этот код имеет функцию вычисления угла наклона устройства с использованием показаний акселерометра.

Мое понимание таково:

Предполагая книжную ориентацию, если я поверну устройство вперед, ось акселерометра увеличивается в сторону отрицательного значения -1,0 (т.е. устройство разложено горизонтально экраном вверх). Если я наклоню устройство ко мне, значение оси x увеличится до значения 1,0 (пока устройство не станет плоским, обращенным к земле).

Ось Y изменяется вверх и вниз по оси от -1,0 до 0,0 (0 означает, что устройство находится в горизонтальном положении).

Если мы возьмем некоторые показания, скажем, x = 0,5 (угол -45 градусов, наклон устройства к себе) и y = 0,8. Если я построил это на графике декартовых координат с y (перекатывающимся X в качестве вертикальной оси) и x (перекатывающимся Z в качестве горизонтального) и проведу линию между ними, я понимаю, что могу использовать функцию обратного тангенса (atan) для вычисления угла. Моя путаница возникает в строке 1. Я не понимаю, почему эта линия добавляет 90 градусов (в радианах) к вычисленному углу, заданному функцией atan?

Я просто не могу представить на графике, что происходит. Если бы кто-то мог пролить свет на это - это было бы очень ценно.

1 Ответ

0 голосов
/ 06 декабря 2012

Я полагаю, что эти +90 градусов или -90 градусов (в случае отрицательного поворота Z) добавляются, чтобы привести значение наклона к широко используемому Полярная система координат с углом от -180 до 180 градусов.Предполагая, что при взгляде на экран устройства Z-линия выступает вверх, а Z-линия смотрит на вас с экрана, результат вычислений над vill даст вам угол между плоскостью экрана и горизонтальной плоскостью.

Предположим, что значение ускорения является положительным, когда оно идет «внутри» устройства:

1) Устройство находится в вертикальном положении, у нас естьZ = 1, RolXX = 0. Код возвращает 90 градусов.

2) Устройство наклонено к пользователю.Пусть rollZ будет 0,7, а RollingX будет -0,7.Это даст нам угол в 45 градусов.

3) Устройство находится в перевернутом положении, теперь у нас есть перекатывающееся Z = -1 и перекатывающееся X = 0, и оно составляет -90 градусов.

...