Render.ru

снова углы... помогите плиз довести алгоритм до ума

LuVeNa

Активный участник
Рейтинг
7
#1
в стороннем приложении имеются углы Эйлера (оси XZY) === (50 180 180)
задача корректно их дёрнуть в 3дмакс ---> (130 0 0)

система работает ок, при любых углах поворота по осям Z и Y
до тех пор пока угол по X не превышает 90

Код:
    r_euler = eulerAngles (0-r_rotx) (0-r_rotz) (0-r_roty)
    $.rotation = inverse (eulertoquat r_euler)
как правильно сконвертировать, чтобы сохранить точность переноса объектов?
в 3dmax если вращаешь по X более 90, то угол становится дальше 100-110-120-и тд
в приложении после 90 по X - угол идет на убыль 85-80-75-... по ZY ноль превращается в 180

Спасибо!
 

Вложения

Последнее редактирование:

LuVeNa

Активный участник
Рейтинг
7
#2
как есть вбивать эти углы явно не работает
пока только проследил как получается то, что имеем

Код:
$.rotation = eulerAngles 50 180 180
quattoeuler2 (inverse (eulertoquat (eulerAngles 50 180 180) order:2))

по логике сейчас нужно еще повращать по X
но у нас возможно два случая, когда это не нужно делать
Код:
$.rotation = eulerAngles 50 180 180
in coordsys #local $.rotation = eulerangles -50 0 0
in coordsys #local $.rotation = eulerangles -50 0 0

либо так получается нужное вращение, но нужен универсальный вариант
Код:
$.rotation.x_rotation  = 50
$.rotation.y_rotation  = 180
$.rotation.z_rotation  = 0
как бы это связать воедино.... :pompus:
 

Вложения

Последнее редактирование:

LuVeNa

Активный участник
Рейтинг
7
#3
этот алгоритм сочинял методом перебора наугад, пока углы не начали совпадать
тогда не попалось случая с вращением более 90 по Х, а теперь вот требуется
Код:
    r_euler = eulerAngles (0-r_rotx) (0-r_rotz) (0-r_roty)
    $.rotation = inverse (eulertoquat r_euler)
и зря мудрил с двойной инверсией, результат такой же
r_euler = eulerAngles r_rotx r_rotz r_roty
$.rotation = eulertoquat r_euler
 
Сверху