Учебное пособие / Метематические основы машинной графики / exilim / 2.7.asp-ThemeID=2
.htmДвумерные преобразования - 2.7. Поворот вокруг произвольной оси в пространстве A.l:link { text-decoration: none; font-size: 8pt; color: 666666; } A.l:hover { text-decoration: none; font-size: 8pt; color: 666666; } A.l:active { text-decoration: none; font-size: 8pt; color: 666666; } A.l:visited { text-decoration: none; font-size: 8pt; color: 666666; } A.std:link { text-decoration: none; font-size: 11pt; font-weight: bold; color: 8E5717; } A.std:hover { text-decoration: none; font-size: 11pt; font-weight: bold; color: 7F0000; } A.std:active { text-decoration: none; font-size: 11pt; font-weight: bold; color: 8E5717; } A.std:visited { text-decoration: none; font-size: 11pt; font-weight: bold; color: 8E5717; } A.li:link { text-decoration: none; font-size: 10pt; font-weight: bold; color: 666666; } A.li:hover { text-decoration: none; font-size: 10pt; font-weight: bold; color: 666666; } A.li:active { text-decoration: none; font-size: 10pt; font-weight: bold; color: 666666; } A.li:visited { text-decoration: none; font-size: 10pt; font-weight: bold; color: 666666; } A.lil:link { text-decoration: none; font-size: 11pt; color: 666666; } A.lil:hover { text-decoration: none; font-size: 11pt; color: 7F0000; } A.lil:active { text-decoration: none; font-size: 11pt; color: 666666; } A.lil:visited { text-decoration: none; font-size: 11pt; color: 666666; } Алгоритмические
основы Математические
основы Flash 5 CorelDraw 10 3D Studio Max3 [программа] [тесты] [лабораторные] [вопросы] [литература]
2. Пространственные преобразования и проекции
2.7. Поворот вокруг произвольной оси в пространстве Обобщенный случай поворота вокруг произвольной оси в пространстве встречается часто, например в робототехнике, мультипликации, моделировании. Следуя логике предьщущего обсуждения, поворот вокруг произвольной оси в пространстве выполняется с помощью переноса и простых поворотов вокруг координатных осей. Так как метод поворота вокруг координатной оси известен, то основная идея заключается в том, чтобы совместить произвольную ось вращения с одной из координатных осей. Предположим, что произвольная ось в пространстве проходит через точку (x0, y0, z0) с направляющим вектором (cx, cy, cz). Поворот вокруг этой оси на некоторый угол δ выполняется по следующему правилу: выполнить перенос так, чтобы точка (x0, y0, z0) находилась в начале системы координат; выполнить соответствующие повороты так, чтобы ось вращения совпала с осью z (выбор координатной оси в данном случае произволен); выполнить поворот на угол δ вокруг оси z; выполнить преобразование, обратное тому, что позволило совместить ось вращения с осью z; выполнить обратный перенос. В общем случае для того, чтобы произвольная ось, проходящая через начало координат, совпала с одной из координатных осей, необходимо сделать два последовательных поворота вокруг двух других координатных осей. Для совмещения произвольной оси вращения с осью z сначала выполним поворот вокруг оси x, а затем вокруг оси y. Чтобы определить угол поворота α вокруг оси х, используемый для перевода произвольной оси в плоскость хz, спроецируем сначала на плоскость yz направляющий единичный вектор этой оси (рис. 2.1,а). Компоненты y и z спроецированного вектора равны cy- и cz-компонентам единичного направляющего вектора оси вращения. Из рис. 1.8,а следует, что d =
cy2 + cz2 (2.1) и cosα = cz
d sinα = cy
d (2.2) После перевода в плоскость хz с помощью поворота вокруг оси х, z-компонента единичного вектора равна d, а x-компонента равна cx, т.е. x-компоненте направляющего вектора, как это показано на рис. 2.1,b. Длина единичного вектора равна, конечно, 1. Таким образом, угол поворота α вокруг оси y, необходимый для совмещения произвольной оси с осью z, равен cosβ = d sinβ = cx (2.3) Тогда полное преобразование модсно представить в виде [М] = [Т] [Rx] [Ry] [Rδ] [Ry]-1[Rx]-1[T]-1 (2.4) где матрица переноса равна [T] = 1 0 0 0
0 1 0 0
0 0 1 0
-x0 -y0 -z0 1 Матрица преобразования поворота вокруг оси х [Rx] = 1 0 0 0
0 cosθ sinθ 0
0 -sinθ cosθ 0
0 0 0 1 = 1 0 0 0
0 cz/d cy/d 0
0 -cy/d cz/d 0
0 0 0 1 и вокруг оси y [Ry] = cos(-β) 0 -sin(-β) 0
0 1 0 0
sin(-β) 0 cos(-β) 0
0 0 0 1 = d 0 cx 0
0 1 0 0
-cx 0 d 0
0 0 0 1 И, наконец, вращение вокруг произвольной оси задается матрицей поворота вокруг оси z [Rδ] = cosδ sinδ 0 0
-sinδ cosδ 0 0
0 0 1 0
0 0 0 1 На практике углы α и β не вычисляются явным образом. Элементы матриц поворотов [Rx] [Ry] в (2.4) получаются из уравнений (2.1)-(2.3) за счет выполнения двух операций деления и извлечения квадратного корня. Хотя данные результаты были разработаны для произвольной оси в первом квадранте, они применимы во всех квадрантах. Если компоненты направляющего вектора произвольной оси неизвестны, то зная вторую точку (x1, y1, z1) на оси, их можно определить, нормализовав вектор, соединяющий первую и вторую точки. Более точно вектор оси из (x0, y0, z0) в (x1, y1, z1) равен [V] = [(x1 - x0) (y1 - y0) (z1 - z0)]. Нормализация дает компоненты направляющего вектора: [cx cy cz] = [(x1 - x0) (y1 - y0) (z1 - z0)]
[(x1 - x0)2 + (y1 - y0)2 + (z1 - z0)2]1/2 назад | содержание | вперед © ОСУ АВТФ