2012-03-12 5 views
3
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; 

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

Мое понимание заключается в следующем:

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

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

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

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

+0

Я не знаю iPhone или его системы координат, но линии 1 и 2 согласуются с углом наклона, равным 0, когда rZ = 0 и rX <0, pi/2, когда rZ> 0 и rX = 0, и -pi/2, когда rz <0 и rX = 0. Но это не соответствует остальным двум строкам. – Beta

ответ

0

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

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

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

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

3) Устройство находится в перевернутом положении, теперь у нас есть rollZ = -1 и rollX = 0, а это -90 градусов.

Смежные вопросы