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