Расчет положения объекта, движущегося по круговому движению в 3D - PullRequest
0 голосов
/ 04 августа 2010

У меня есть объект, который совершает круговые движения в трехмерном пространстве, центр или окружность имеют значения x: 0, y: 0, z: 0, радиус - переменная.я знаю, где находится объект на окружности (по углу [давайте назовем это ar] или по расстоянию, на которое он переместился).круг можно наклонить во всех трех направлениях, поэтому я получил три переменные для углов, назовем их ax, ay и az.Теперь мне нужно вычислить, где именно находится объект в пространстве.мне нужны координаты x, y и z.

float radius = someValue;
float ax = someValue;
float ay = someValue;
float az = someValue;
float ar = someValue; //this is representing the angle of the object on circle

//what i need to know
object.x = ?;
object.y = ?;
object.z = ?;

Ответы [ 2 ]

4 голосов
/ 04 августа 2010

Вам нужно предоставить больше информации, чтобы получить точную формулу.Ответ зависит от того, в каком порядке вы применяете свои вращения, в каком направлении вы вращаетесь и какова начальная ориентация вашего круга.Кроме того, будет намного легче вычислить положение объекта, учитывая один поворот за раз.

Итак, где находится ваш объект, если все вращения равны 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).

Вы также можете выполнить это вращение с умножением матрицы, как сказал Марсело, но это может быть излишним для вашего проекта..

3 голосов
/ 04 августа 2010

Использовать матрицу вращения .Убедитесь, что вы используете единичный вектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...