Аффинные преобразования в пространстве
Рассмотрим трехмерный случай (3D) (3-dimension) и сразу введем однородные координаты. Потупая аналогично тому, как это было сделано в размерности два, заменим координатную тройку (x, y, z), задающую точку в пространстве, на четверку чисел (x y z 1) или, более общо, на четверку (hx hy hz), h = 0. Каждая точка пространства (кроме начальной точки О) может быть задана четверкой одновременно не равных нулю чисел; эта четверка чисел определена однозначно с точностью до общего множителя. Предложенный переход к новому способу задания точек дает возможность воспользоваться матричной записью и в более сложных трехмерных задачах. Любое аффинное преобразование в трехмерном пространстве может быть представленно в виде суперпозиции вращений, растяжений, отражений и переносов. Поэтому вполне уместно сначала подробно описать матрицы именно этих преобразований (ясно, что в данном случае порядок матриц должен быть равен четырем). А. Матрицы вращения в пространстве. Матрица вращения вокруг оси абсцисс на угол j:
0
0 -sin j cos j 0 0 0 0 1
Матрица вращения вокруг оси ординат на угол y:
sin y 0 cos y 0 0 0 0 1
Матрица вращения вокруг оси аппикат на угол c:
-sin
0 0 1 0 0 0 0 1
Полезно обратить внимание на место знака “ - ” в каждой из трех приведенных матриц. Б. Матрица растяжения-сжатия:
a 0 0 0
0 0 g 0 0 0 0 1
где a > 0 – коэффицент растяжения (сжатия) вдоль оси абсцисс; b > 0 – коэффицент растяжения (сжатия) вдоль оси ординат; g > 0 – коэффицент растяжения (сжатия) вдоль оси аппликат.
В. Матрицы отражения Матрица отражения относительно плоскости ху: 1 0 0 0
0 0 -1 0 0 0 0 1
Матрица отражения относительно плоскости yz: -1 0 0 0
0 0 1 0 0 0 0 1
Матрица отражения относительно плоскости zx: 1 0 0 0
0 0 1 0 0 0 0 1
Г. Матрица переноса (здесь (l, m, n) - вектор переноса): 1 0 0 0
0 0 1 0 l m n 1
Как и в двумерном случае, все выписанные матрицы невырождены. Приведем важный пример построения матрицы сложного преобразования по его геометрическому описанию. Пример 3. Построить матрицу вращения на угол j вокруг прямой L, проходящей через точку А (a, b, c) и имеющую направляющий вектор (l, m, n). Можно считать, что направляющий вектор прямой является единичным: l2 + m2 + n2 = 1 На рис. 10 схематично показано, матрицу какого преобразования требуется найти.
X Рис. 10
Решение сформулированной задачи разбивается на несколько шагов. Опишем последовательно каждый из них. 1-й шаг. Перенос на вектор –А (-a, -b, -c) при помощи матрицы
1 0 0 0
0 0 1 0 -a -b -c 1
В результате этого преноса мы добиваемся того, чтобы прямая L проходила через начало координат. 2-й шаг. Совмещение оси аппликатс прямой L двумя поворотами вокруг оси абсцисс и оси ординат. 1-й поворот – вокруг оси абсцисс на угол y (подлежащий определению). Чтобы найти этот угол, рассмотрим ортогональную проекцию L’ исходной прямой L на плоскость X = 0 (рис. 11).
Y Y
0
Рис. 11
Направляющий вектор прямой L’ определяется просто – он равен (0, m, n). Отсюда сразу же вытекает, что
cos y = n / d, sin y = m / d, (4.10)
где
d = m2 + n2 (4.11)
Соответствующая матрица вращения имеет следующий вид:
1 0 0 0
0 -m/d n/d 0 0 0 0 1
Под действием преобразования, описываемого этой матрицей, координаты вектора (l, m, n) изменятся. Подсчитав их, в результате получим
(l, m, n, 1)[ Rx ] = (l, 0, d, 1). (4.13)
2-й поворот вокруг оси оси ординат на угол q, определяемый соотношениями сos q = l, sin q = -d (4.14)
Cоответствующая матрица вращения записывается в следующем виде: l 0 d 0
-d 0 l 0 0 0 0 1
3-й шаг. Вращение вокруг прямой L на заданный угол j. Так ка теперь прямая L совпадает с осью аппликат, то соответствующая матрица имеет следующий вид:
-sin
0 0 1 0 0 0 0 1
4-й шаг. Поворот вокруг оси ординат на угол -q. 5-й шаг. Поворот вокруг оси абсцисс на угол -y. Однако вращение в пространстве некоммутативно. Поэтому порядок, в котором проводятся вращения, является весьма существенным. 6-й шаг. Перенос на вектор А (a, b, c). Перемножив найденные матрицы в порядке их построения, получим следующую матрицу: [ T ][ Rx ][ Ry ][ Rz ][ Ry ]-1[ Rx ]-1 [ T ]-1.
Выпишем окончательный результат, считая для простоты, что ось вращения ходит через начальную точку.
l 2 + cos j(1 – l 2) l (1 – cos j)m + n sin j l (1 – cos j)n – m sin j 0 l (1 – cos j)m – n sin j m2 + cos j(1 – m2) m(1 – cos j)n + l sin j 0 l (1 – cos j)n + m sin j m(1 – cos j)n – l sin j n2 + cos j(1 - n2) 0 0 0 0 1
Рассматривая примеры подобного рода, мы будем получать в результате невырожденные матрицы вида
a1 a2 a3 0
g1 g2 g3 0 l m n 1
При помощи таких матриц можно преобразовать любые плоские и пространственные фигуры. Пример 4. Требуется подвергнуть заданному аффинному преобразованию выпуклый многогранник. Для этого сначала по геометрическому описанию отображения находим его матрицу [ A ]. Замечая далее, что произвольный выпуклый многогранник однозначно задается набором всех своих вершин Vi (xi, yi, zi), i = 1,…,n, Строим матрицу x1 y1 z1 1 V = .......... (4.18) xn yn zn 1
Подвергая этот набор преобразованию, описываемому найденной невырожденной матрицей четвертого порядка, [ V ][ A ], мы получаем набор вершин нового выпуклого многогранника – образа исходного (рис. 12).
Z
0 Y X
Рис. 11
Заключение Учитывая вышеописанные принципы, была разработана программа моделирования синтеза металлорежущих станков, которая наглядно показывает зависимость компоновки станка от формы обрабатываемой поверхности через код компоновки, а также возможность построения модели станка из стандартных узлов для последующей оценки компоновки. В виду того, что данная программа разрабатывалась как исследование, в ней лишь наглядно демонстрируется модель станка для обработки произвольной поверхности. Программа построена на основе принципов объектно-ориентированного программирования (ООП). Такой подход был признан оптимальным для данной задачи с учетом того, что модель станка строится на основе компоновочного кода. При реализации сначала была рассмотрена цепочка узлов, представляющая станок. Это привело к трудностям и неудобству реализации отображения 3-х мерной модели в эмулированном графическом пространстве. Поэтому была реализована концепция, рассматривающая станок, как “дерево” объектов, исходя из того, что один из узлов станка, а именно станина, является неподвижным и зафиксированным жесткой привязкой к системе координат. Таким образом, полученная модель представляла собой объект, из которого выходили две “ветви” объектов. Принципы ООП позволили создать базовый класс, из которого были получены дочерние классы для станины и остальных узлов. Каждый объект инкапсулировал свои свойства и “видел” лишь свои геометрические размеры и координаты, в которые он должен быть помещен, в результате чего модель получилась гибкой. Список используемой литературы. 1. Шишкин Е. В., Боресков А. В. Компьютерная графика. М.: Диалог-МИФИ, 1995. – 288 с., ил. 2. Вайсберг А. В., Гриценко М. Е. Формирование структуры станка на ранних стадиях проектирования. – Точность автоматизированных производств (ТАП – 97). Сборник статей международной научно-технической конференции. Пенза, 1997., с. 52 – 53.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|