Как преобразовать мои повороты x, y, z в осевой угол, чтобы вычислить кватернион

// см. новое (rollMode==2) ниже (с инверсией ())

// Вы, ребята, выглядите так, как будто вы знакомы с кватернионами и трехмерным вводом. Я читаю и читаю и не могу перевести то, что говорят люди, в код. Я пытаюсь создать виртуальную солнечную систему с планетами и космическими кораблями для развлечения. (Я начал 35 лет назад с Applet II plus, но никто не создавал 3D-библиотеку с несколькими представлениями, и у меня нет математических навыков, чтобы писать все это самостоятельно). Сопрягая вещи, мне нужно знать, как получить входные данные, чтобы заставить Axis/Angle и / или Quaternions работать, чтобы поворачивать и вести мой корабль. РЕДАКТИРОВАТЬ: я нашел формулы (и поместил все это здесь для людей в будущем), но я не получаю хорошее вращение - просто изменение заголовка (нет крутого вращения, глядя на что-то). РЕДАКТИРОВАТЬ: Я упростил вещи. Мой крен все еще выходит не на ту ось.

//initial setup
Q1 = new Quat4d();//initial rotation
Q1.inverse();
Q1.conjugate();
//setup input
//set up Q2 (quaternion) with new rotation increment (delta)
//d is (x meters/sec) / frames per second
A2 = new AxisAngle3d(Math.toRadians(d.x), Math.toRadians(d.y), Math.toRadians(d.z));
Q2 = new Quat4d();
Q2.set(A2);//set quaternion with axis/angle
Q2.inverse();//local frame of reference
//Q2.conjugate();//local frame of reference
Q1.mul(Q2);//update with new rotation increment

0 ответов

Другие вопросы по тегам