Если вам не нравится вышеуказанное, вот более простой способ получить разумный результат!
Держите iPad перед собой, пусть LR будет наклоном влево / вправо, ТА - в направлении к вам / от вашего наклона. Таким образом, LR работает от -90 до 90, TA от -90 до 90. (TA отрицательно склоняется к вашему животу.)
Отобразите оба этих числа на экране и переместите устройство, чтобы убедиться, что у вас есть это право с самого начала. Вы не сможете ничего сделать, пока это не сработает.
SolutionAngle будет как стрелка часов, по часовой стрелке, с 12 от вас.
Пройдите эту цепочку решений:
Если LR и TA равны нулю, машина находится в горизонтальном положении. Действуй соответственно.
Если LR плоское (0), ответ может быть 0 или 180, в зависимости от знака TA.
Если TA плоская (0), ответ может быть 90 или 270, в зависимости от знака LR.
В противном случае:
AdjustAngle = Арктан (sin (TA) / sin (LR))
// (Примечание: должно быть от -90 до +90)
if (LR> 0) finalResult = 90 - настройка угла
if (LR <0), finalResult = <strong>270 + настройка угла
Я думаю, что это сделает! Надеюсь, это поможет!
IMO ...... обязательно сгладьте результат с течением времени , для хорошего ощущения.
.
установка угла ...
«Единственное, в чем я не уверен в данный момент (относительно вашей собственной идеи), это как применить его к моему игроку? Привет, Джош, да, просто установите поворот на последний угол, который вы рассчитываете, используя выше! К счастью, это так просто.
Если вам когда-нибудь понадобится конвертировать назад / вперед между градусами и радианами, просто вставьте следующие строки кода, которые все используют:
#include <math.h>
static inline float degreestoradians (double degrees) {return degrees * M_PI/180;}
static inline float radianstodegrees (double degrees) {return degrees * 180/M_PI;}
.
где оси? ...
PS, вот невероятно удобная диаграмма, которую вы можете добавить в закладки:
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAcceleration_Class/Reference/UIAcceleration.html
.
преобразование из акселерометра в углы ...
"акселерометр не предоставляет необработанные данные в углах. Как получить из необработанных данных"
Совершенно верно, я забыл упомянуть об этом извините. Это повседневная проблема ...
distanceFactor = square root of (x^2 + y^2 + z^2)
angle X axis = acos ( x / distanceFactor )
angle y axis = acos ( y / distanceFactor )
angle z axis = acos ( z / distanceFactor) )
Вы должны ПРОВЕРИТЬ это, написав три угла на экране, а затем переместив его, другими словами «физически модульный тест» того раздела, который вы пишете, прежде чем продолжить!
вот один из многих ответов SO: UIAccelerationValue angle
Кстати, как вы, вероятно, видите, вы можете получить приблизительный результат, взяв отношение простого необработанного x к необработанному значению y, а не соотношение двух синусов, в выражении 'AdjustAngle' ... но в любом случае пока не беспокойся об этом.
И наконец!
ВАЖНО Читатели должны заметить, что новая удивительная система Core Motion справится с этим для вас, в зависимости от ваших потребностей. Проверьте это !!!!!
Надеюсь, это поможет!