LINUX.ORG.RU

Матрица вращения


0

0

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

Дано твердое тело в пространстве, определенное множеством точек. Три точки: A[0;0;0], B[xB; yB; zB], C[xC; yC; zC]. Нужна матрица вращения, которая повернет тело так, что-бы точка B стала на положительную часть оси X (B'[xB'0;0], XB'>0), а точка C - на первую четверть плоскости XY (C'[xC'yC'0], xC',yC'>0)

★★

Кури "Аффинные преобразования в пространстве" в инете.

ukez
()

Ты можешь это прочитать

ukez
()

В вопросе не оговоренно, но речь идет скорее всего о повороте вокруг точки A?

Вращения можно описывать квантернионами. В векторном представлении квантернион L = l+l_v. Где l - число, l_v - вектор. Перемножаются они так

(l+l_v)(m+m_v)=l*m-(l_v, m_mv)+l*m_v+m*l_v+[l_v, m_v]

В круглых скобках скалярное, в квадратных векторное произведение.

Поворот вокруг единичного вектора e на угол phi, против часовой стрелки если смотреть из конца вектора e задается квартенионом

cos(phi/2)+sin(phi/2)e

Что бы повернуть вектор r квартернионом (l+l_v) нужно вычислить

(l+l_v)*(0+r)*(l-l_v) по правилам действия с квартенионами.

Если вектор поворачивается квартенионом L а затем M, то результирующий поворот описывается квартенионом M*L.

Угол между векторами можно вычислить по скалярному произведению.

Угол между плоскостями по углу между нормалями.

В данном случае нужно повернуть вокруг вектора [AB, e_x] на угол между векторами AB и e_x. Где e_x - единичный вектор оси x. Затем вокруг e_x что-бы точка C встала куда надо.

наконец столбцы матрицы поворота - образы базисных векторов.

Удачного гемороя.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.