Графический дизайн для датчика наклона с использованием значения тангажа и крена
Я пытаюсь разработать графику на основе значения высоты тона и крена, используя "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 );