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 градусов (в радианах) к вычисленному углу, заданному функцией атана?
Я просто не могу изобразить на графике что происходит. Если бы кто-то мог пролить свет на это, это было бы очень оценено.
Я не знаю iPhone или его системы координат, но линии 1 и 2 согласуются с углом наклона, равным 0, когда rZ = 0 и rX <0, pi/2, когда rZ> 0 и rX = 0, и -pi/2, когда rz <0 и rX = 0. Но это не соответствует остальным двум строкам. – Beta