Здравствуйте, проблема: есть самолет, известны точки его положения в пространстве, время, высота, тангаж, курс, крен.
делаю цикл по времени, т.е. в каждую секунду полета задаю высоту и вращения самолета циклом примерно таким:
for m=1 to t-1 do
at time (Time_array[m+1])
( theobj.pos = [ar[1][m+1],ar[2][m+1],ar[3][m+1]]
)
)
здесь вдаваться в секунды не нужно, не принципиально. принципиально, что самолет вращается совершенно не как самолет, а как объект не поддающийся вообще никакому описанию.
дело в том, что понятие курса это проекция продольной оси самолета на горизонтальную плоскость, т. е. то, что написано как roll это не вращение самолета вокруг вертикальной оси, а ,в идеале, нужно вращать в мировых координатах, в горизонтальной плоскости, а все остально в локальных с приращением. так вот разделить вращения:
in coordsys world
rotate theobj (angleaxis (roll_array[m+1]-roll_array[m])[0,0,1])
rotate theobj (angleaxis (atack_array[m+1]-atack_array[m])[1,0,0])
не получается, или может я не так делаю.
Пробовал сделать все это в кватернионах, изучил перевод различных вращений друг в друга, еще хуже чем в Эйлерах получается, даже ошибку отследить трудно.
Направьте пожалуйста в нужное русло.
У тебя грамматическая ошибка. Нужно использовать скобки после in coordsys.
for m=1 to t-1 do
at time (30*Time_array[m+1])
(
in coordsys local
(
rotate theobj (angleaxis (bank_array[m+1]-bank_array[m])[0,1,0])
rotate theobj (angleaxis (atack_array[m+1]-atack_array[m])[1,0,0])
rotate theobj (angleaxis (roll_array[m+1]-roll_array[m])[0,0,1])
)
)
---------------------------
in coordsys world
(
rotate theobj (angleaxis (roll_array[m+1]-roll_array[m])[0,0,1])
)
in coordsys local
(
rotate theobj (angleaxis (bank_array[m+1]-bank_array[m])[0,1,0])
rotate theobj (angleaxis (atack_array[m+1]-atack_array[m])[1,0,0])
)
скорее всего, вы неправильно трактуете оси вращения. Включите режим gimbal для манипулятора поворота, чтобы представлять, как на самом деле задаётся вращение через углы эйлера, потом подберите соответствующий axis order.
Savin DenisНаиболее частая ошибка не задан центр координат вращения, задается через префикс about
Остальные проблемы обычно бывают от не правильного преобразования данных или не правильной трактовке модели поведения объектов.
мой совет сделай референсную анимацию на 3-5 кадров, ручками хотя бы если нет, дальше обычно видно сразу видно что не так.
у меня один объект поэтому about не нужен пока, насколько я понимаю, но хотя когда в кватернионах вращение пробую, объект действительно как будто вокруг не своей оси вращается
Я считаю, что если известны крен, тангаж, курс, то этого недостаточно. Нужно чтобы были известны крен (roll), тангаж (pitch), рыскание (yaw). Потом и курс можно вычислить, если нужно.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
skyfan
делаю цикл по времени, т.е. в каждую секунду полета задаю высоту и вращения самолета циклом примерно таким:
for m=1 to t-1 do
at time (Time_array[m+1])
( theobj.pos = [ar[1][m+1],ar[2][m+1],ar[3][m+1]]
)
for m=1 to t-1 do
at time (30*Time_array[m+1])
(
in coordsys local
rotate theobj (angleaxis (bank_array[m+1]-bank_array[m])[0,1,0])
rotate theobj (angleaxis (atack_array[m+1]-atack_array[m])[1,0,0])
rotate theobj (angleaxis (roll_array[m+1]-roll_array[m])[0,0,1])
)
здесь вдаваться в секунды не нужно, не принципиально. принципиально, что самолет вращается совершенно не как самолет, а как объект не поддающийся вообще никакому описанию.
дело в том, что понятие курса это проекция продольной оси самолета на горизонтальную плоскость, т. е. то, что написано как roll это не вращение самолета вокруг вертикальной оси, а ,в идеале, нужно вращать в мировых координатах, в горизонтальной плоскости, а все остально в локальных с приращением. так вот разделить вращения:
in coordsys world
rotate theobj (angleaxis (roll_array[m+1]-roll_array[m])[0,0,1])
а потом
in coordsys local
rotate theobj (angleaxis (bank_array[m+1]-bank_array[m])[0,1,0])
rotate theobj (angleaxis (atack_array[m+1]-atack_array[m])[1,0,0])
не получается, или может я не так делаю.
Пробовал сделать все это в кватернионах, изучил перевод различных вращений друг в друга, еще хуже чем в Эйлерах получается, даже ошибку отследить трудно.
Направьте пожалуйста в нужное русло.
igorznag
skyfan
Savin Denis
Остальные проблемы обычно бывают от не правильного преобразования данных или не правильной трактовке модели поведения объектов.
мой совет сделай референсную анимацию на 3-5 кадров, ручками хотя бы если нет, дальше обычно видно сразу видно что не так.
Chebu
skyfan
igorznag