Учитывая начальную точку, углы в каждой оси вращения и направление, вычислить конечную точку


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

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

Как я буду вычислять координаты конечной точки?

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

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

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

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

3 ответа:

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

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

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

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

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

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

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

X=x0 + расстояние * cos (angleZ) * sin (angleY)

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

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

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

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