Вращение по рысканию, тангажу и крену до шести плавающих переменных

Мне нужна помощь в создании функции для преобразования трех углов (в градусах, шага рыскания и крена) в шесть переменных с плавающей запятой.

Как мне заставить функцию выводить эти числа с плавающей запятой?

  • {0, 0, 0} = {1, 0, 0, -0, -0, 1}
  • {45, 0, 0} = {0.70710676908493, 0.70710676908493, 0, -0, -0, 1}
  • {0, 90, 0} = {-4.3711388286738e-08, 0, 1, -1, 0, -4.3711388286738e-08}
  • {0, 0, 135} = {1, -0, 0, -0, -0.70710676908493, -0.70710676908493}
  • {180, 180, 0} = {1, -8.7422776573476e-08, 8.7422776573476e-08, 8.7422776573476e-08, 0, -1}
  • {225, 0, 225} = {-0.70710682868958, 0.5, 0.5, -0, 0.70710670948029, -0.70710682868958}
  • {270, 270, 270} = {1.4220277639103e-16, -2.3849761277006e-08, 1, 1, 1.1924880638503e-08, 1.42202776319103e-16}
  • {315, 315, 315} = {0.5, -0.85355341434479, 0.14644680917263, 0.70710688829422, 0.5, 0.5}

ДОПОЛНИТЕЛЬНЫЕ ПРИМЕРЫ ПО ЗАПРОСУ: Егор Скриптунов

  • {10, 20, 30} = {0.92541658878326, -0.018028322607279, 0.37852230668068, -0.34202012419701, -0.46984630823135, 0.81379765272141}
  • {10, 30, 20} = {0.85286849737167, -0.0052361427806318, 0.52209949493408, -0.5, -0.29619812965393, 0.81379765272141}
  • {20, 10, 30} = {0.92541658878326, 0.21461015939713, 0.3123245537281, -0.17364817857742, -0.49240386486053, 0.85286849737167}
  • {20, 30, 10} = {0.81379765272141, 0.25523611903191, 0.52209949493408, -0.5, -0.15038372576237, 0.85286849737167}
  • {30, 10, 20} = {0.85286849737167, 0.41841205954552, 0.3123245537281, -0.17364817857742, -0.33682405948639, 0.92541658878326}
  • {30, 20, 10} = {0.81379765272141, 0.4409696161747, 0.37852230668068, -0.34202012419701, -0.16317591071129, 0.92541658878326}

Код, который у меня сейчас есть, может вычислить все поплавки, кроме 2-го и 3-го.

function convert_rotations(Yaw, Pitch, Roll)
    return {
        math.cos(math.rad(Yaw))*math.cos(math.rad(Pitch)),
        0,
        0,
        math.sin(math.rad(Pitch))*-1,
        math.sin(math.rad(Roll))*math.cos(math.rad(Pitch))*-1,
        math.cos(math.rad(Roll))*math.cos(math.rad(Pitch))
    }
end

Кажется, я не могу найти правильную математику, когда все углы отличны от нуля для 2-го поплавка и 3-го поплавка, но я придумал это:

-- The second float when the Yaw is 0 degrees
math.sin(math.rad(Pitch))*math.sin(math.rad(Roll))*-1

-- The second float when the Pitch is 0 degrees
math.sin(math.rad(Yaw))*math.cos(math.rad(Roll))

-- The second float when the Roll is 0 degrees
math.sin(math.rad(Yaw))*math.sin(math.rad(Pitch))

И для 3-го поплавка я придумал это:

-- The third float when Yaw is 0 degrees
math.sin(math.rad(Pitch))*math.cos(math.rad(Roll))

-- The third float when Pitch is 0 degrees
math.sin(math.rad(Yaw))*math.sin(math.rad(Roll))

-- The third float when Roll is 0 degrees
math.cos(math.rad(Yaw))*math.sin(math.rad(Pitch))

person Guy    schedule 27.05.2015    source источник
comment
В чем именно тут вопрос? Математика? Код? Что-то другое? Вы уже пробовали что-нибудь для этого?   -  person Etan Reisner    schedule 28.05.2015
comment
Как мне заставить функцию выводить эти числа с плавающей запятой? Математика, которую я предполагаю, включает в себя math.rad, math.cos, math.sin и math.tan, но я не уверен, как все это вообще сойдется.   -  person Guy    schedule 28.05.2015
comment
У вас есть эти входы в каком-то формате? Это столы? Вы знаете, что такое математика? Вы можете написать/вы написали/у вас есть библиотека для математики?   -  person Etan Reisner    schedule 28.05.2015
comment
Входные данные в градусах для углов рыскания, тангажа и вращения. Я считаю, что на выходе есть матрицы. У меня есть код, который может выполнять математику первых двух поплавков, но только когда повороты шага и крена установлены на 0. Математика такова: {math.cos(math.rad(yaw)), math.sin(math.rad (рыскание))}.   -  person Guy    schedule 28.05.2015
comment
Вывод не совсем похож на матрицы. Если бы это были матрицы, они должны были бы быть 4x4 (поэтому, даже если бы мы не предполагали перевода, мы все равно получили бы девять значений). Шесть значений будут работать в 2D, но тогда нам не понадобятся три угла. Можете ли вы сказать нам, где вы взяли примеры? Это какая-то работа для университета?   -  person Henrik Ilgen    schedule 28.05.2015
comment
Нет, это не для университета. На самом деле это сценарий для изменения вращения 3D-объектов в игре. Я обновил свой пост своим текущим кодом, но все еще есть проблемы с парой значений с плавающей запятой.   -  person Guy    schedule 30.05.2015
comment
Можете ли вы опубликовать больше примеров? Пожалуйста, покажите ответы для этих входных данных: 10,20,30, 10,30,20, 20,10,30, 20,30,10, 30,10,20, 30,20,10   -  person Egor Skriptunoff    schedule 30.05.2015