преобразование сферических и декартовых координат

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

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

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

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

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

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

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

 Kirk Broadhurst10 янв. 2011 г., 01:28
Что означает вращение в x, вращение в y? Вы не можете вращаться в одном измерении - в двух измерениях есть только 1 плоскость вращения, а в 3D - только 2 плоскости вращения.
 Nick Udell10 янв. 2011 г., 14:47
Извините, я все еще плохо знаком с трехмерными системами координат. У меня есть углы через эти оси, как в Yaw (Y), Pitch (X) и Roll (Z). Я должен был это очистить.
 Dr. belisarius10 янв. 2011 г., 01:34
@ Кирк прав. Подумайте так: для представления точки в 3D вам нужно 3 скаляра (числа). Но у вас есть 4 (3 угла и расстояние). Что-то лишнее ...

Ответы на вопрос(3)

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

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

Решение Вопроса

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

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

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

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

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

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

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

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

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

Ваш ответ на вопрос