Вам нужно предоставить больше информации, чтобы получить точную формулу.Ответ зависит от того, в каком порядке вы применяете свои вращения, в каком направлении вы вращаетесь и какова начальная ориентация вашего круга.Кроме того, будет намного легче вычислить положение объекта, учитывая один поворот за раз.
Итак, где находится ваш объект, если все вращения равны 0?
Давайте предположим, что это в (r, 0,0).
Псевдокод будет выглядеть примерно так:
pos0 = (r,0,0)
pos1 = pos0, rotated around Z-axis by ar (may not be Z-axis!)
pos2 = pos1, rotated around Z-axis by az
pos3 = pos2, rotated around Y-axis by ay
pos4 = pos3, rotated around X-axis by ax
pos4
будет позицией вашего object
, если все настроено правильно,Если у вас возникли проблемы с настройкой, попробуйте сохранить ax = ay = az = 0 и беспокоиться только о ar, пока вы не поймете это правильно.Затем начните устанавливать другие углы по одному и обновлять формулу.
Каждое вращение может быть выполнено с помощью
x' = x * cos(angle) - y * sin(angle)
y' = y * cos(angle) + x * sin(angle)
Это вращение по оси Z.Чтобы повернуть по оси Y, используйте z и x вместо x и y и т. Д. Также обратите внимание, что здесь угол в радианах.Возможно, вам понадобится сделать угол отрицательным для некоторых вращений (в зависимости от того, в каком направлении ar, ax, ay, az
).
Вы также можете выполнить это вращение с умножением матрицы, как сказал Марсело, но это может быть излишним для вашего проекта..