Ответ 1
Если вам не нравится приведенный выше, вот более простой способ получить разумный результат!
Удерживайте iPad перед собой, пусть LR будет наклоном влево/вправо, TA к вам/от вашего наклона. Таким образом, LR работает от -90 до 90, TA от -90 до 90. (отрицательный результат TA склоняется к вашему животу.)
Отобразите оба эти номера на экране и переместите устройство вокруг, так что вы уверены, что имеете это право для начала. Вы не сможете ничего сделать, пока это не сработает.
Решение будет выглядеть как часовая стрелка, по часовой стрелке, на расстоянии 12 от вас.
Пройдите эту цепочку принятия решений:
Если оба LR и TA равны нулю, машина плоская. Действуйте соответствующим образом.
Если LR является плоским (0), ответ будет равен 0 или 180, в зависимости от знака TA.
Если TA является плоской (0), ответ будет либо 90, либо 270, в зависимости от знака LR.
В противном случае:
adjustAngle = arctan (sin (TA)/sin (LR))
//(NB, который должен работать от -90 до +90)
if (LR > 0) finalResult = 90 - adjustAngle
if (LR < 0), finalResult = 270 + adjustAngle
Я думаю, что это сделает! Надеюсь, это поможет!
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, здесь невероятно удобная диаграмма, которую вы можете захотеть добавить в закладки:
.
преобразование с акселерометра в углы...
"акселерометр не предоставляет сырые данные в углах. Как получить из необработанных данных
Совершенно верно, я забыл упомянуть об этом. Это повседневная проблема...
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) )
Вы должны ПРОВЕРИТЬ это, написав три угла на экране, а затем перемещая их, другими словами "физически unit test", который вы напишете, прежде чем продолжить!
вот один из многих ответов SO: UIAccelerationValue angle
Кстати, как вы, вероятно, видите, вы можете получить грубый результат, взяв соотношение просто raw x по необработанному значению y, а не к соотношению двух синусов в выражении "adjustAngle"... но в любом случае не беспокойтесь об этом пока.
И, наконец,
ВАЖНО Читатели должны обратить внимание на то, что удивительная новая система Core Motion, обрабатывает много для вас, в зависимости от ваших потребностей. Проверьте это!!!!!
Надеюсь, что это поможет!