2015-10-04 3 views
0

Прошу прощения за задание этого вопроса, поскольку я знаю, что его попросили и ответили много раз. Я буквально часами изучаю 3d и математику.Вращающийся вектор3d вокруг vector3d

У меня есть два vector3ds. A - (0,0,0), а B - (0,0, -500). Я хочу повернуть B вокруг A на заданную степень.

Может ли кто-нибудь дать неофитский ответ? Решения, которые я видел, - это области, которые я пытаюсь изучить, но пока не понимаю.

+0

вы не можете вращать вокруг ничего без указания _center ** точка ** из rotation_ – Alnitak

+0

центральной точки является вектор А, и я хочу, вектор B, чтобы повернуть вокруг А на определенный угол, сохраняя его расстояние от вектора А. Извините, если это не было ясно из моего вопроса. –

+0

Это все еще неясно - для ротации требуется две вещи - точка центрирования _ и ось вращения. Ваш 'A', хотя вы описали его как вектор, фактически является точкой _центра, а тот факт, что это начало, упрощает математику, потому что вам не понадобится многоступенчатое преобразование или однородные координаты 4x4. Однако вам все равно нужно указать ось вращения. См. Https://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions – Alnitak

ответ

1

В комментариях вы пояснили, что хотите просто повернуть вокруг оси Y. Фактически это фактически просто двумерное вращение, где изменяются координаты X и Z, но координата Y не изменяется.

Поэтому:

x' = x cos(theta) + z sin(theta) 
z' = -x sin(theta) + z cos(theta) 

См this SIGGRAPH link

+0

Спасибо, Алнитак, ваша настойчивость восхитительна. 45 лет из колледжа, и мои математические навыки резко атрофировались. Ваш ответ выше, по крайней мере, был мне знаком, но я что-то повредил. 'code' farpoint.X = farpoint.X * cos (заголовок) + farpoint.Z * sin (заголовок) farpoint.Z = -farpoint.X * sin (заголовок) + farpoint.Z * sin (заголовок)' code' Правильно ли я переводил вам пример. Чувствуя себя довольно невежественным сейчас ... –

+0

@BillMartini, вы должны хранить новые координаты X и Z во временных переменных, иначе новое значение 'farPoint.X' будет (неправильно) использовано во втором вычислении вместо его исходного значения. Кроме того, не забывайте, что математические функции компьютера почти наверняка будут использовать радианы, а не градусы. – Alnitak

+0

Хорошо, это имеет смысл, вероятно, должно было это понять. Моя голова все еще прячется от этих матричных формул. Да, линия выше умножает заголовок постоянной конверсией в радианы. Я только начал играть с openGL, и я смог в значительной степени изменить пример стартера за короткое время, но я быстро обнаруживаю, что мои математические способности - это шоу-стоппер. Спасибо за помощь. –

Смежные вопросы