Для заданной начальной точки, углов в каждой оси вращения и направления рассчитать конечную точку - PullRequest
9 голосов
/ 10 января 2011

У меня есть начальная точка в трехмерных координатах, например (0,0,0).

У меня есть направление, на которое я указываю, представленное тремя углами - по одному на каждый угол поворота (поворот в X, вращение в Y, вращение в Z) (для примера давайте предположим, что я один из тех старых черепах с логотипом с ручкой) и расстояние, которое я буду перемещать в направлении, которое я указываю.

Как мне рассчитать координаты конечной точки?

Я знаю, что для 2D-системы это было бы просто:

new_x = old_x + cos(angle) * distance
new_y = old_y + sin(angle) * distance

, но я не могу понять, как применить это к 3размеры

Я полагаю, что другой способ думать об этом - попытаться найти точку на поверхности сферы, зная направление, на которое вы указываете, и радиус сферы.

Ответы [ 3 ]

7 голосов
/ 10 января 2011

Во-первых, для позиционирования точки в 3D вам нужны только два угла (точно так же, как вам нужен был только один в 2D)

Во-вторых, по разным причинам (медленный cos & sin, блокировка кардана, ...)Вы, возможно, захотите сохранить направление как вектор и вообще избегать углов.

В любом случае, предполагая, что направление изначально выровнено по z, затем поверните вокруг оси x, а затем поверните вокруг оси y.

x = x0 + расстояние * cos (угол Z) * ​​sin (угол Y)

Y = y0 + расстояние * sin (Anglez)

Z = z0 + расстояние * cos (angleZ) *cos (angleY)

4 голосов
/ 10 января 2011

Исходя из трех углов, вы должны построить матрицу вращения 3x3.Тогда каждый столбец матрицы представляет локальные направления x, y и z.Если у вас есть локальное направление, по которому вы хотите двигаться, то умножьте вращение 3x3 на вектор направления, чтобы получить результат в глобальных координатах.

Я сделал небольшое введение в преобразования трехмерных координат, которые, я думаю, ответят на вашивопрос.

3D-координаты

3D coordinates

2 голосов
/ 10 января 2011

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

Возможно, вы просто ищете преобразование сферических и декартовых координат .

...