JavaFX получает угол Эйлера от Transform

Я пытаюсь сделать какой-то 3D-редактор, и я пытаюсь создать инструмент «орбита», очень похожий на тот, что есть в Blender.

Теперь я хотел бы знать, что такое угол. Я использовал код, предоставленный Хосе Переда, который можно найти здесь, но мне нужно, чтобы углы находились в диапазоне от 0 до 2π . Я не могу получить их из полученных углов, так как выходные значения не находятся в диапазоне от -π до π и различны для каждого вывода.

Кроме того, извлеченные углы должны быть относительно друг друга, как если бы вы поместили 3 разных преобразования Rotate, где каждое последующее относится к предыдущим, предпочтительно в порядке YXZ, так как это порядок, который я использую везде, а также формат модели, в который редактор собирается экспортировать.

По запросу я загрузил часть кода, относящуюся к вопросу, на Pastebin. Насколько я мог судить по напечатанным значениям, углы расположены относительно друг друга в порядке XYZ. Для расчета угла я использую фрагмент из связанного вопроса:

public static Vec3d getAngle(Node n) {
    Transform T = n.getLocalToSceneTransform();
    double roll = Math.atan2(-T.getMyx(), T.getMxx());
    double pitch = Math.atan2(-T.getMzy(), T.getMzz());
    double yaw = Math.atan2(T.getMzx(), Math.sqrt(T.getMzy() * T.getMzy() + T.getMzz() * T.getMzz()));
    return new Vec3d(roll, pitch, yaw);
}

Небольшое замечание: у меня очень мало знаний о матрицах и их преобразованиях, так как это то, что мы будем изучать в нашей школе в следующем году, что затрудняет мне понимание.


person Mysterious Wolf    schedule 31.03.2018    source источник
comment
Крякать! Крякать! Крякать!   -  person Sergey Grinev    schedule 31.03.2018
comment
Спасибо, я не знаю, о чем я думал, когда писал последнее предложение вопроса.   -  person Mysterious Wolf    schedule 01.04.2018
comment
Вы проверили это вопрос? Он применяет новый поворот к предыдущему повернутому состоянию. Если это не относится к вам, пожалуйста, уточните, что вы спрашиваете. Короткий фрагмент кода будет полезен.   -  person José Pereda    schedule 01.04.2018
comment
Я проверил ответ и использую предоставленный метод. Я уже сделал часть, где я поворачиваю инструмент относительно всех предыдущих поворотов/локальной оси, но теперь мне нужно получить глобальные углы поворота. Я добавил больше объяснений и очистил ненужную информацию в исходном сообщении.   -  person Mysterious Wolf    schedule 01.04.2018
comment
Без фрагмента кода, который позволяет нам воспроизвести то, что вы делаете, что вы получаете и что у вас не работает, действительно трудно дать вам правильный ответ.   -  person José Pereda    schedule 01.04.2018