Здравствуйте, проблема: есть самолет, известны точки его положения в пространстве, время, высота, тангаж, курс, крен.
делаю цикл по времени, т.е. в каждую секунду полета задаю высоту и вращения самолета циклом примерно таким:
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])
не получается, или может я не так делаю.
Пробовал сделать все это в кватернионах, изучил перевод различных вращений друг в друга, еще хуже чем в Эйлерах получается, даже ошибку отследить трудно.
Направьте пожалуйста в нужное русло.
делаю цикл по времени, т.е. в каждую секунду полета задаю высоту и вращения самолета циклом примерно таким:
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])
не получается, или может я не так делаю.
Пробовал сделать все это в кватернионах, изучил перевод различных вращений друг в друга, еще хуже чем в Эйлерах получается, даже ошибку отследить трудно.
Направьте пожалуйста в нужное русло.