Графический дизайн для датчика наклона с использованием значения тангажа и крена

Я пытаюсь разработать графику на основе значения высоты тона и крена, используя "C". для этого у меня есть датчик наклона (акселерометр), который выплевывает значение крена и шага. Я хочу использовать графику, которая должна показать мне направление, в котором я наклоняю датчик наклона.

Ниже приведен код из моей программы, который определяет угол (на основе значения шага и крена).

szBuff [] с данными в формате R:SXXX.XX P:SXXX.XX\r\n

где S= знак и R= крен, P= шаг.

    if (szBuff[2] == '+' && szBuff[12] == '-')
    {
       -------------------------------------    
       if(pitch>roll){                             
        Angle = atan(pitch / pitch- roll);             // Insert formula here 
       -------------------------------------
      }
    }  

Здесь подача и крен без знака.

Я рисую линию, которая отклоняется на основе значения шага и крена. Используя вышеприведенный алгоритм, я вычисляю угол, с которым он должен отклоняться.

 line((left+150),(top+150),((left+150)+150*cos(Angle)),((top+150)+150*sin(Angle)));

Мне нужно математическое уравнение, которое могло бы выполнить мою задачу. Угол = atan(pitch / pitch -roll) не рисует требуемый угол. Только для того же шага и крена он остается в силе и разворачивается на 90 градусов (что означает, что я наклоняю датчик в прямом направлении). Поэтому не могли бы вы заменить формулу угла на некоторое математическое выражение, которое могло бы генерировать угол наклона на основе крена и шага.

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

1 ответ

Обычно тангаж и крен - это углы. Я предполагаю, что крен - это угол, который вращается вокруг вертикальной оси, а шаг - это угол, который вращается вокруг горизонтальной оси.

Тогда вы можете рассчитать положение 3d как:

x = sin(roll) * cos(pitch)
y = sin(pitch)
z = cos(roll) * cos(pitch)

И то и другое roll а также pitch должны содержать свои знаки.

Кажется, вы хотите проецировать этот вектор на фиксированную плоскость, возможно, на плоскость xz. Тогда вы бы нарисовали это используя:

line( left+150,
      top+150,
      left+150+150*x,
      top+150+150*z );
Другие вопросы по тегам