
2. Преобразование модели
Представляют интерес преобразования двух типов:
- объект задан в некоторой системе координат (СК). Необходимо получить представление этого объекта в той же СК, но после его перемещения, или вращения, или масштабирования, или после любой комбинации таких преобразований. Будем говорить, что это преобразования моделирования или преобразование модели;
- объект задан в некоторой СК0, относительно которой задана новая СК1. Необходимо получить представление этого же объекта в СК1. Будем говорить, что это преобразование координат.
Начнем изучение преобразований с преобразований модели. Преобразования координат имеют много общего с преобразованиями модели, поэтому при изучении этого вопроса будем уже в значительной степени подготовлены.
Кроме того, начнем с 2D и затем расширим полученные результаты на 3D.
И, наконец, будем исходить из следующего – в компьютерной графике объект любой сложности представляет собой совокупность точек (вершин). Отрезок – две точки, контур – совокупность отрезков, грань – замкнутый контур, объект 3D – совокупность граней.
Поэтому все задачи преобразования будем изучать как преобразования над точкой, понимая, что если применить эти преобразования над всеми вершинами объекта, то и получим нужным образом преобразованный объект.
2.1. Преобразование модели в 2d
Пусть в СК XY задана точка A0(x0, y0), как на рис. 2.1.
Выполним такие преобразования:
(2.1)
Ясно,
что в общем случае
и
,
следовательно, можно говорить о какой-то
другой точке A1(x1,
y1).
Но можно говорить, что это та же точка
A,
которая в результате преобразований
(2.1) переведена из положения A0(x0,
y0)
в положение A1(x1,
y1).
Условные обозначения: A
– точка; A0(x0,
y0)
или А0
– точка A
в начальном положении 0; A1(x1,
y1)
или А1
–
точка A
в положении
1, в которое она переводится преобразованием
(2.1).
Если m11, m12, m21, m22, l1 и l2 – действительные (целые или вещественные), то такие преобразования называют аффинными.
Удобно использовать более компактную матричную форму записи преобразований (2.1):
– столбец;
– столбец;
–
матрица
22;
–
столбец.
Тогда запись преобразования 2.1 примет вид:
. (2.2)
Графически изображать преобразование (2.2) будем так:
Индексы у М01 и L01 показывают, что эти матрицы участвуют в переводе точки A из положения A0 в положение A1. Можно представить сложное перемещение точки А, состоящее из последовательности простых, например, как это показано на рис. 2.2.
Найдем параметры преобразований M02, L02 и M03, L03:
1) ;
2)
;
;
;
;
(2.3)
3)
=
;
;
;
.
(2.4)
Такой способ вычислений алгоритмически не очень удобен, поскольку при увеличении длины цепочки преобразований расчетные формулы каждый раз меняются, все более усложняясь.
В компьютерной графике принято использовать представление точки в однородной форме. В 2D это делается так:
– точка в физических координатах,
–
та
же точка в однородной форме;
A0 и А0 – одна и та же точка, только в разных формах представления.
Введем понятие матрицы преобразования в однородной форме:
Это матрица преобразования в однородной форме для 2D. Далее будем применять стиль курсив для точек и матриц, когда подразумевается их представление в физических координатах, и нормальный стиль (прямое написание), когда подразумевается их представление в однородной форме.
Найдем результат такого произведения
.
Полученный результат сравним с формулой (1) и убеждаемся, что это есть представление в однородной форме точки A1. Следовательно
(2.5)
Сравним формулы (2.2) и (2.5). Это одно и тоже преобразование, но формула (2.2) – это преобразования в привычных нам физических координатах, а (2.5) – в однородной форме. Форма (2.5) предпочтительнее, ибо она более компактна.
Э
тот
эффект усиливается при выполнении
цепочки преобразований. Вернемся к рис.
2.2 и построим аналогичный ему рис. 2.3, но
в терминах однородных координат.
На рис. 2.3 M01, M12 и M23 – матрицы преобразования в однородной форме, переводящие точку из положения A0 в положения A1, A2 и A3 соответственно.
Решим ту же задачу. Найдем преобразования, переводящие точку в A2 и A3 из A0.
– этот результат уже получен и он аналогичен формуле (2.2).
–
этот
результат аналогичен формуле (2.3), но он
выгодно отличается компактностью.
–
этот
результат аналогичен формуле (2.4), здесь
эффект еще более силен.
Справедливы такие формулы:
,
,
,
.
В общем случае для цепочки преобразований:
,
; (2.6)
. (2.7)
Выводы из предыдущего материала: преобразования в однородной форме обладают высокой алгоритмической привлекательностью. Матрица сложного преобразования, являющегося последовательностью составляющих его, получается простым произведением матриц, задающих составляющие преобразования (см. формулы (2.6) и (2.7)).
До сих пор не известно, какие значения следует назначать элементам матрицы M01 с тем, чтобы точка перемещалась строго определенным образом. Научимся назначать значения элементам матрицы M01 целенаправленно.
1.
Пусть
и
,
тогда
.
Т
аким
образом, рассматриваемая матрица M01
будучи применена к точке A0
переводит ее в положение A1
как на рис. 2.4.
Рассматриваемую матрицу целесообразно выделить как типовую элементарную матрицу, задающую преобразование смещения и обозначать ее будем T или T(l1, l2) в зависимости от того, как это требуется из контекста, т.е.
.
2.
Пусть
;
,
тогда
.
О
братимся
к рис. 2.5.
Если точку A0 повернуть в положительном направлении (против часовой стрелки) на угол φ, то она примет положение A1. Если элементарными средствами тригонометрии вычислить координаты x1 и y1 точки A1 на этом рисунке, то получим тот же результат для x1 и y1, который получен ранее при выполнении операции .
Таким образом, рассматриваемая матрица M01 будучи примененной к точке A0 поворачивает ее на угол φ в положительном направлении как на рис. 2.5. Эту матрицу целесообразно выделить как очередную типовую элементарную матрицу, задающую преобразование вращения, и обозначать ее будем R или R(φ), т.е.
.
3.
Пусть
и
,
тогда
=
.
Здесь x – координата точки A0 масштабируется на коэффициент Sx; y – на коэффициент Sy. Рассматриваемую матрицу можно выделить как следующую типовую элементарную матрицу, задающую преобразование масштабирования, и обозначать ее будем S или S(Sx, Sy), т.е.
.
Матрица масштабирования имеет несколько полезных частных случаев.
;
.
И
з
рис. 2.6 видно, что преобразование S(Sx
= –1, Sy
= 1) есть зеркальное отражение относительно
оси y.
Аналогично матрица
осуществляет зеркальное отражение
относительно оси x,
матрица
–
относительно осей x
и y
одновременно.
4.
Пусть
и
,
тогда
.
Здесь точка смещается вдоль оси x на величину, пропорциональную y0 и h. Рассматриваемую матрицу можно выделить как типовую элементарную, задающую преобразование сдвига в x направлении, как на рис. 2.7.
Аналогично
можно создать матрицу сдвига в y
направлении
и тогда
.
На рис. 20 показано это преобразование.
Рассматриваемую матрицу можно выделить как типовую элементарную, осуществляющую преобразования сдвига, обозначать ее будем I или I(h), или I(g):
,
.
Матрицы T, R, S и I задают элементарные преобразования, из которых может быть построено любое, как угодно сложное.
Пример. Построить матрицу вращения точки A0 на угол φ вокруг точки A(ax, ay).
1) Матрицу R(φ) напрямую для этих целей использовать нельзя, ибо она осуществляет поворот вокруг начала координат.
2) Переместим точку A0 на (–ax, –ay) в положение A1, при этом положение A1 относительно начала координат, будет такое же, как положение A0 относительно A. Матрица такого преобразования будет M01=T(–ax, –ay).
3)
Повернем точку A1
на угол φ
относительно начала координат. Точка
примет положение A2.
Матрица такого преобразования будет
.
4) Переместим точку A2 на (ax, ay) в положение A3, при этом точка A3 окажется в положении, как если бы точку A0 повернули на угол φ вокруг точки A. Соответствующая матрица будет M23= T(ax, ay).
Результирующее преобразование в соответствии с правилом (2.7) будет:
;
.
Это прекрасная иллюстрация того, как сложное движение конструируют как последовательность элементарных движений, для каждого из которых составляют матрицу преобразования и результирующее преобразование получают как их произведение по правилу (2.7).