Матрица вращения вокруг произвольного вектора

evgenych

Угол Alfa, Компоненты вектора x0,y0,z0, точка приложения (0,0,0)
Какой вид у этой матрицы?
Я был очень удивлен и разочарован, но поиск в интернете мне не очень помог, помогите разобраться.
Ссылка подойдет.

strelok69

вот посмотри
может подойдёт

natunchik

http://www.cprogramming.com/tutorial/3d/rotation.html
Учись пользоваться гуглом.
А ваще мог бы и сам посчитать =) Типа, смотришь что происходит с базисными векторами, записываешь куски по координатам и выносишь общие подвыражения.

vvasilevskiy

Делать лучше не так. Хорошо известны матрицы поворота относительно осей.
Поэтому нужно делать примерно так: (посчитать углы Эйлера, вектора оносительно которого вертим) Сначала найти матрицы которые развотачивают вектор(вокруг которого нужно вертеть) так чтобы он стал параллелен оси Z (Пусть AB) потом развернуть вектор(уже другой который нужно поворачивать) на нужный угол альфа (пусть C) потом обратно (B'A'' и ^-1 совпадают так как матрицы поворота ортогональные). Получим B'A'CAB Матрица поворота вокруг оси выглядит просто: по номеру этой оси на диагонали 1 на двух других cos sin -sin cos(что то такое, легко сообразить)остальные нули.

natunchik

Ты не прав.
Если уже есть посчитанные точно компоненты матрицы поворота вокруг произвольного вектора, то пользоваться лучше ими, потому что в твоём алгоритме как минимум пять умножений матриц, а это мало того, что долго, так ещё и точность страдает.

vvasilevskiy

Если перемножить пять матриц, то получится одна. Т.е это произведение не зависит от того какой вектор мы вертим, только от того вокруг чего мы вертим. Уверен на 99% что стандартная как ты говоришь матрица получается именно таким способом. единственное что я могу придумать для улучшения точности-это сделать три матрицы, где выделенные оси соответственно X Y Z, потом усреднить

vvasilevskiy

Пользоваться известными алгоритмами хорошо, но иногда полезно знать как их получить.

Barmaglot

смотришь что происходит с базисными векторами
перемножить пять матриц
это топ 2 самых идиоцких метода решения этой задачи
Один метод – через кватернионы (придуман мной в школе
самый простой – через скалярное и векторное произведение (1 курс)

vvasilevskiy

самый простой – через скалярное и векторное произведение (1 курс)
В студию! А мы сравним сложность.

vovatroff

Эта матрица имеет вид R(alpha)=exp(N*alpha где N - матрица бесконечно малого
поворота (генератор поворота) вокруг оси, определяемой единичным вектором
направления n: для любого вектора x, по определению, Nx=[n,x] (векторное произведение).
В самом деле, приращение любого вектора x при бесконечно малом повороте на угол dfi
вокруг направления n есть dx=[n,x] dfi (см, например, Ландау, Лифшиц, Механика,
параграф про сохранение момента импульса то есть dx=Nx dfi. А это есть дифур
относительно x(fi): dx/dfi=Nx, где N - постоянная матрица (см.выше). Интегрируя этот
дифур с "начальным" условием x(fi=0)=x, получим x(fi)=exp(N*fi)x === R(fi)x, что и
было написано. Остается только вычислить эту матричную экспоненту, например,
раскладывая ее в ряд Тейлора по степеням матрицы N и замечая, что N^3 = -N
(для проверки раскройте тройное векторное произведение: [n,[n,[n,x]]] = -[n,x]
поэтому ряд Тейлора сводится к многочлену относительно марицы N. Я на память ответа
не помню, но он очень простой.
Да, и ссылку могу дать, хотя эта монография и труднодоступна:
Биденхарн, Лаук, название что-то вроде Теория углового момента, том 1,
где-то в самом начале.

evgenych

Спасибо Огромное!
Похоже что это именно то, что нужно. Не знаю почему у меня не получилось найти, наверное это потому что я искал в русскоязычном яндексе. А выводить собственно ручно ответ на задачу, математический процесс решения которой для меня не интересен, и решение которой я был уверен существует, вобщем я подумал что оно того не стоит К тому же линейку я последний раз учил 5 лет назад
Оставить комментарий
Имя или ник:
Комментарий: