Я работаю над моделированием самолета с тремя осями движения (крен, тангаж и рыскание). У меня есть угол крена (количество градусов, в котором крылья наклонены вокруг оси носа и хвоста самолета), угол тангажа (угол между носом и горизонтом) и угол поворота (компасный курс самолета).
То, что я пытаюсь определить, - это единичный вектор подъемной силы (т.е. вектор, который находится «вверх» от самолета) - т.е. когда самолет стоит прямо и выровнен, вектор подъема должен быть направлен вверх, когда нос самолета направлен вверх, вектор подъема задается как 180 - roll_angle
и т. д.
Я добился частичного прогресса только с двумя углами(например, вращение и рыскание), просто взяв сферические координаты новой точки и преобразовав в декартову и перенеся нормаль к плоскости, заданной результирующим вектором. Однако я не уверен, как принять во внимание третий угол (шаг).
Я стремлюсь достичь функции, которая принимает три угла (крен, шаг и рыскание) и дает единичный векторлифт.
function get_lift_vector()
{
var lift_vector_heading = 0;
var lift_vector_elevation = 90;
// Adjust to range (-180, 180]
roll_angle %= 360;
if(roll_angle > 180)
{
roll_angle = 180 - roll_angle;
}
// Roll
if(roll_angle > 0)
{
lift_vector_heading = 90;
lift_vector_elevation = 90 - roll_angle;
}
else if(roll_angle < 0)
{
lift_vector_heading = 270;
lift_vector_elevation = 90 - roll_angle;
}
// Yaw
lift_vector_heading += aircraft_compass_heading;
lift_vector_heading %= 360;
// Pitch
}