Мне нужны ось и угол для вращения вокруг 3 фиксированных осей. Что я хочу:
ввод:
- угол альфа (вращение вокруг фиксированной оси x)
- угол бета (вращение вокруг фиксированной оси Y)
- угловая гамма (вращение вокруг фиксированной оси Z)
вывод:
- ось вращения с углом
Проблема в том, что я всегда вращаюсь вокруг уже повернутых осей. Мой код до сих пор:
var q1 = x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(0, 0, 1), alpha)
var q2 = x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(1, 0, 0), beta)
var q3 = x3dom.fields.Quaternion.axisAngle(new x3dom.fields.SFVec3f(0, 1, 0), gamma)
var qr = q1.multiply(q2);
qr = qr.multiply(q3);
var r = qr.toAxisAngle();
this.curNode.attr('rotation', r[0].x + ' ' + r[0].y + ' ' + r[0].z + ' ' + r[1]);
Видео: правильно только одно вращение вокруг кольца (красное). два других - вокруг осей повернутого объекта. Они должны располагаться вокруг фиксированных осей.
SFVec3f(1, 0, 0)
относится к оси Y? И имейте в виду, что повороты не коммутативны, если вы примените их в неправильном порядке, вы получите неправильный результат. - person pentadecagon   schedule 07.02.2014