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

Аффинное преобразование это такое преобразование, которое сохраняет параллельность линий, но не обязательно углы или длины.
В компьютерной графике все, что относится к двумерному случаю, принято обозначать символом 2D (2-dimension). Допустим, на плоскости введена прямолинейная координатная система. Тогда каждой точке М ставится в соответствие упорядоченная пара чисел (х, у) ее координат (рис. 1).


Указанные выше формулы можно рассматривать двояко: либо сохраняется точка и изменяется координатная система в этом случае произвольная точка М остается той же, изменяются лишь ее координаты (х, у) (х*, у*) , либо изменяется точка и сохраняется координатная система в этом случае формулы задают отображение, переводящее произвольную точку М(х, у) в точку М*(х*, у*), координаты которой определены в той же координатной системе. В дальнейшем будем интерпретировать формулы, как правило, что в заданной системе прямолинейных координат преобразуются точки плоскости.
В аффинных преобразованиях плоскости особую роль играют несколько важных частных случаев, имеющих хорошо прослеживаемые геометрические характеристики. При исследовании геометрического смысла числовых коэффициентов в формулах для этих случаев удобно считать, что заданная система координат является прямоугольной декартовой.
Наиболее часто применяются следующие приемы компьютерной графики: перенос, масштабирование, поворот, отражение. Алгебраические выражения и рисунки, поясняющие данные преобразования сведем в табл.1.

Аффинные преобразования на плоскости

Под переносом понимается смещение примитивов вывода на один и тот же вектор.
Масштабирование это увеличение или уменьшение всего изображения либо его части. При масштабировании координаты точек изображения умножаются на некоторое число.
Под поворотом понимается вращение примитивов вывода вокруг заданной оси. (В плоскости чертежа вращение происходит вокруг точки.)
Под отражением понимают получение зеркального отображения изображения относительно одной из осей (например X).
Выбор этих четырех частных случаев определяется двумя обстоятельствами:
1. Каждое из приведенных выше преобразований имеет простой и наглядный геометрический смысл (геометрическим смыслом наделены и постоянные числа, входящие в приведенные формулы).
2. Как доказывается в курсе аналитической геометрии, любое преобразование вида (*) всегда можно представить как последовательное исполнение (суперпозицию) простейших преобразований вида А, Б, В и Г (или части этих преобразований).
Таким образом, справедливо следующее важное свойство аффинных преобразований плоскости: любое отображение вида (*) можно описать при помощи отображений, задаваемых формулами А, Б, В и Г.
Для эффективного использования этих известных формул в задачах компьютерной графики более удобной является их матричная запись.
Для объединения этих преобразований вводят однородные координаты. Однородными координатами точки называется любая тройка одновременно не равных нулю чисел x1 , x2 , x3 , связанных с заданными числами x и y следующими соотношениями:



Тогда точка M(х, у) записывается как M(hX, hY, h), где h 0 является масштабным множителем. Двумерные декартовы координаты могут быть найдены как

В проективной геометрии эти координаты вводятся для устранения неопределенностей, возникающих при задании бесконечноудаленных (несобственных) элементов. Однородные координаты можно интерпретировать как вложение промасштабированной с коэффициентом h плоскости в плоскость Z= h в трехмерном пространстве.
Точки в однородных координатах записываются трехэлементными вектор-строками. Матрицы преобразования должны иметь размер 3х3.
При помощи троек однородных координат и матриц третьего порядка можно описать любое аффинное преобразование плоскости.
В самом деле, считая h = 1, сравним две записи: помеченную символом (*) и нижеследующую, матричную:

Теперь можно использовать композиции преобразований, применяя одно результирующее вместо ряда преобразований, следующих друг за другом. Можно, например, сложную задачу разбить на ряд простых. Поворот точки А около произвольной точки В можно разбить на три задачи:
перенос, при котором В= 0 (где 0-начало координат);
поворот;
обратный перенос, при котором точка В возвращается на место и т. д.
Композиция наиболее общего вида из операций Т, D, R, M имеет матрицу:

Верхняя часть размером 2х2 - объединенная матрица поворота и масштабирования, a tx и ty описывают суммарный перенос.
К изложенным фундаментальным преобразованиям сводятся следующие:
прокручивание перемещение окна на поверхности визуализации (если перемещение ограничено только направлениями вверх и вниз, то оно называется вертикальным прокручиванием);

трансфокация постепенное изменение масштаба изображения;
кувыркание динамическое изображение примитивов вывода, вращающихся вокруг некоторой оси, ориентация которой непрерывно изменяется в пространстве;
панорамирование постепенный перенос изображения с целью создания зрительного ощущения движения.

Аффинным преобразованием б называется такое преобразование плоскости, которое всякую прямую переводит в прямую и сохраняет отношение, в котором точка делит отрезок.

На рис.1: L"= б(L), A"=б(A), B"=б(B), C"=б(C), |

Преобразования - движение и подобие - являются частными случаями аффинных, так как в силу свойств движения и подобия для них выполнены все требования определения аффинных преобразований.

Приведем пример аффинного преобразования, не сводящегося к ранее рассмотренным. С этой целью сначала рассмотрим параллельное проектирование плоскости на плоскость.

Пусть даны плоскости: w и w1 прямая l (направление проектирования), не параллельная ни одной из этих плоскостей (рис.2). Точка Аєw называется проекцией точки А1єw1, если АА1||l , то прямая АА1 называется проектирующей прямой. Параллельное проектирование представляет собой отображение плоскости w1 на w.

Отметим следующие свойства параллельного проектирования.

1) Образом всякой прямой а1 является прямая.

В самом деле, прямые, проектирующие точки прямой а1, образуют плоскость (она проходит через а1 параллельно l), которая при пересечении с w дает образ прямой а1 - прямую а(рис.2).

2) Отношение, в котором точка делит отрезок, сохраняется, т.е.

Сразу следует из теоремы о пересечении сторон угла параллельными прямыми.

Перейдем непосредственно к построению примера аффинного преобразования.

Возьмем два экземпляра плоскости w и один из них переместим в другое положение w1(рис.3). Новое положение какой-либо точки Аєw обозначим А1єw1. Теперь плоскость w1 спроектируем в каком-нибудь положении на w, проекцию точки А1 обозначим А".

Получилось преобразование плоскости w на себя, при котором. В силу симметричных свойств параллельного проектирования для данного преобразования выполняются оба требования определенного аффинного преобразования, следовательно, построенное сейчас преобразование -перспективно- аффинное.

3)Основная теорема. Каковы бы ни были 2 аффинных репера и, существует единственное аффинное преобразование, которое первый переводит во второй.

Существование. Рассмотрим преобразование а, которое произвольную точку А, имеющую в репере R координаты (х,у), переводит в точку А", имеющую в репере R" те же координаты (рис.4). Очевидно, что а(R)=R". Покажем, что а - аффинное преобразование.

Образом прямой l, имеющей в репере R уравнение ах+ву+с=0, будет линия l", которая в R" имеет то же самое уравнение. Значит, l"- прямая(рис.5). Следовательно, образом произвольной прямой является прямая.

Пусть теперь точка С(х,у) делит отрезок, соединяющий точки А(х1,у1), В(х2,у2) в отношении

А так как образы этих точек- А",В",С" имеют те же координаты(в другой системе), то и, следовательно,

Итак для преобразования б выполнены оба требования определения, значит б- аффинное преобразование.

Единственность доказательства от противного. Пусть существует два аффинных преобразования б1 и б2, при которых. Тогда найдется такая точка А, что, где (рис.6). Обозначим через К точку пересечения прямых ОА и Е1Е2(если эти прямые параллельны, то надо взять Е1А, ОЕ2, если и эти прямые параллельны, надо взять Е2А и ОЕ1). Так как, то образом точки К будет точка К"1-точка пересечения прямых. В силу определения аффинного преобразования:

Аналогично для преобразования б2.

Таким образом

Первое из этих равенств показывает, что точки К"1 и К"2 совпадают, а тогда из второго следует А"1=А"2, что противоречит А. Полученное противоречие доказывает теорему.

Основную теорему можно сформулировать иначе: каковы бы ни были два треугольника, существует единственное аффинное преобразование, переводящее один в другой.

Доказанная основная теорема делает понятие аффинного преобразования конструктивным. Аффинное преобразование задается парой произвольных аффинных реперов.

4)Уравнения аффинного преобразования получаются из основной теоремы и формул преобразования аффинных координат точно так же, как и уравнения движения и подобия. Пусть даны два репера и (рис. 7).

получаются уравнения:

Эти уравнения записаны в аффинной системе координат. В частности они действуют и в прямоугольных декартовых координатах.

Возьмем на плоскости (или в пространстве) какой-нибудь вектор (рис. 142). При аффинном преобразовании точки переходят соответственно в точки , имеющие относительно нового репера те же координаты, которые точки имели относительно старого. Так как координаты вектора получаются вычитанием координат его начальной точки из координат его конца, то координаты вектора относительно нового репера те же, что и координаты вектора относительно старого репера. Итак:

При аффинном преобразовании вектору ставится в соответствие вектор , имеющий относительно нового репера те же координаты, которые вектор и имел относительно старого.

Отсюда сразу следует, что при аффиниом преобразовании равным векторам соответствуют равные, так что:

2° Аффинное преобразование плоскости (пространства) порождает ьзаимно однозначное отображение на себя (преобразование) многообразия V всех свободных векторов плоскости (соответственно пространства).

Это преобразование обладает следующим свойством линейности: если при данном преобразовании векторам и, v соответствуют векторы u, v, то вектору будет соответствовать вектор , а вектору - вектор Ли (доказывается сразу переходом к координатам). Из свойства линейности вытекает, далее:

Если при данном аффинном преобразовании векторам соответствуют векторы , то всякой линейной комбинации

векторов соответствует линейная комбинация

векторов (с теми же коэффициентами ).

Так как при аффинном преобразовании нулевому вектору очевидно соответствует нулевой, то из доказанного следует:

4° При аффинном преобразовании линейная зависимость векторов сохраняется , значит, всякие два коллинеарных вектора переходят в коллинеарные, всякие три компланарных вектора переходят в компланарные).

5° Обратное преобразование к аффинному преобразованию есть аффинное преобразование.

В самом деле, если данное аффннное преобразование А плоскости задается переходом от репера к реперу , то аффинное преобразование, задаваемое переходом от репера к реперу , есть, как легко видеть, преобразование, обратное к преобразованию А.

То же и для пространства.

Мы видели, что при аффинном преобразовании линейная зависимость векторов сохраняется. Сохраняется и линейная независимость векторов:

6° При аффинном преобразовании А всякая линейно независимая система векторов их, . переходил в линейно независимую - в противном случае при аффинном преобразовании , обратном к А, линейно зависимая система и, . перешла бы в линейно независимую, что, как мы знаем, невозможно.

Так как репер есть система линейно независимых векторов (двух на плоскости, трех в пространстве), приложенных к данной точке О, то при аффинном преобразовании всякий репер переходит в репер. Более того, имеет место предложение

7° При аффинном отображении (заданном переходом от репера I к реперу ) всякий репер II переходит в репер [ и всякая точка М (всякий вектор и) переходит в точку М (в вектор ) с теми же координатами относительно репера , какие точка М и вектор и имели относительно репера II.

Доказательство в случае плоскости и в случае пространства одно и то же. Ограничимся случаем плоскости. Пусть II есть репер (рис. 143), а - репер сначала утверждение, касающееся векторов. Если вектор и имеет относительно репера координаты , то . Но тогда образ вектора и есть, по свойству 3°, вектор

имеющий координаты относительно репера . Пусть точка М имеет координаты относительно репера .

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

Доказанное утверждение является существенным: из него следует, что, задав аффинное преобразование переходом от какого-нибудь репера к реперу , мы можем задать его, взяв в качестве исходного любой репер и указав тот репер , в который он должен перейти.

В качестве приложения только что сделанного замечания докажем, что произведение двух аффинных преобразований есть аффинное преобразование.

В самом деле, пусть аффинное преобразование задается переходом от репера I к реперу II. Аффинное преобразование мы можем, по только что доказанному, задать переходом от репера II к какому-то реперу III. Тогда аффинное преобразование, задаваемое переходом от репера I к реперу III, есть, очевидно, произведение преобразования на преобразование .

Замечание 1. Только что доказанные свойства 1° - 7° аффинных преобразований, очевидно, имеют место и для аффинных отображений одной плоскости на другую (одного экземпляра трехмерного пространства на другой).

Тождественное преобразование плоскости, соответственно пространства, есть, очевидно, аффинное преобразование. Вспомним, что преобразование, обратное к аффинному, есть аффинное. Наконец, как мы только что доказали, произведение двух аффинных преобразований есть аффинное преобразование. Отсюда - на основании условия, данного в § 6, п. 6, Прибавления, - сразу вытекает следующая основная

Теорема 1. В группе всех преобразований плоскости (пространства) аффинные преобразования образуют подгруппу.

Среди аффинных преобразований движения выделяются тем, что они могут быть заданы переходом от одной прямоугольной системы координат к другой, тоже прямоугольной и имеющей тот же масштаб. Обратное преобразование к движению есть движение, и произведение двух движений есть движение. Так как тождественное преобразование есть частный случай движения, то (в полной аналогии с теоремой 1) имеет место и

Теорема 1. В группе всех аффинных преобразований движения образуют подгруппу.

Продолжаем перечисление простейших свойств аффинных преобразований и отображений.

Три точки тогда и только тогда коллинеарны (т. е. лежат на одной прямой), когда векторы коллинеарны. А так как коллинеарность векторов при аффинном преобразовании сохраняется, то сохраняется и коллинеарность точек. Отсюда вытекает:

При аффинном отображении (плоскости или пространства) прямая переходит в прямую.

Мы сейчас дадим второе доказательство этого факта.

Пусть дано аффинное отображение. Оно состоит в том, что каждая точка М с координатами (в координатной системе ) переходит в точку М, имеющую те же координаты во второй системе . Отсюда следует:

9° При данном аффинном отображении (определенном переходом от репера , к реперу ) множество всех точек, координаты которых (в координатной системе ) удовлетворяют некоторому Уравнению, переходит в множество точек, координаты которых в системе удовлетворяют тому же уравнению.

В частности, прямая с уравнением

(в системе ) перейдет в прямую, имеющую то же уравнение, но только в системе координат .

Точно так же при аффинном преобразовании пространства (определенном переходом от репера к реперу ) плоскость, имеющая в системе уравнение

переходит в плоскость, имеющую то же уравнение (2), но только в системе координат .

Прямая, заданная в пространстве своим «общим уравнением»

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

при данном аффинном преобразовании перейдет в прямую, имеющую те же уравнения, но только в системе координат . Итак, доказана

Теорема 2. При аффинном преобразовании плоскости, соответственно пространства, прямые переходят в прямые, плоскости переходят в плоскости.

При этом сохраняется параллельность.

В самом деле, если две прямые (или две плоскости, или прямая и плоскость) параллельны, то их уравнения относительно репера удовлетворяют известным условиям параллельности; но образы этих прямых (плоскостей) имеют те же уравнения относительно репера , и, значит, удовлетворяют тем же условиям параллельности.

Замечание 2. Сохранение параллельности при аффинном преобразовании можно вывести и пользуясь тем, что аффинное преобразование взаимно однозначно.

Действительно, при всяком взаимно однозначном отображении (например, пространства на себя) образ пересечения двух (любых) множеств есть пересечение образов этих множеств.

Значит, два пересекающихся множества при всяком взаимно однозначном отображении переходят в пересекающиеся.

Отсюда следует, что при аффинном преобразовании плоскости две параллельные прямые, а при аффинном отображении пространства две параллельные плоскости переходят в параллельные; сохраняется и свойство параллельности между прямой и плоскостью.

Пусть в пространстве даны две параллельные прямые; они лежат в одной плоскости и не пересекаются. При аффинном преобразовании пространства эти две прямые перейдут в две прямые, также лежащие в одной плоскости и не пересекающиеся, т. е. в две параллельные прямые.

Теорема 3. При аффинном преобразовании плоскости (пространства), переводящем прямую d в прямую , отрезок прямой d переходит в отрезок прямой а точка М прямой d, делящая отрезок в данном отношении К, переходит в точку

М прямой d, делящую отрезок в том же отношении (рис. 144).

Доказательство. Так как при положительном А. мы получаем точки, лежащие внутри отрезка (соответственно а при отрицательном - вне этого отрезка, то из второго утверждения теоремы 3 следует первое. Доказываем второе утверждение теоремы 3, ограничиваясь случаем плоскости. Пусть (в системе координат ) имеем

Так как точка М делит отрезок в отношении , то

в пространстве к этим равенствам присоединится еще равенство . При данном аффинном преобразовании точки перейдут в точки с теми же координатами, что и у точек , но только в координатной системе . Эти координаты связаны по-прежнему соотношениями (3), из которых следует, что делит отрезок ММ в отношении . Этим теорема 3 доказана.

Пусть при аффинном преобразовании А пространства плоскость отображается на плоскость . Возьмем в плоскости какой-нибудь репер , т. е. пару неколлииеарных векторов , приложенных к какой-нибудь точке о (рис. 145). При преобразовании А точка о плоскости перейдет в точку о плоскости , неколлинеарные векторы перейдут в неколлинеарные векторы , т. е. репер от плоскости перейдет в репер плоскости .

Всякий лежащий в плоскости вектор при этом перейдет в лежащий в плоскости вектор с теми же координатами относительно репера , какие вектор и имел относительно репера . Отсюда следует, что и всякая точка М плоскости перейдет в точку М плоскости , имеющую относительно репера , те же самые координаты, какие точка М имела в плоскости относительно репера . Другими место Теорема 4. Пусть при аффинном преобразовании пространства плоскость я переходит в плоскость . Тогда преобразование А отображает произвольный репер плоскости на некоторый репер оаплоскости и ставит в соответствие каждой точке М плоскости точку М плоскости , имеющую относительно репера , те самые координаты, которые точка М имела относительно репера . Другими словами: преобразование А порождает аффинное отображение плоскости на плоскость .

Формирование изображения и разнообразные действия с ним требуют от пользователя известной математической грамотности. Геометрические понятия, формулы и факты, относящиеся к плоскому и трехмерному случаям, играют в задачах компьютерной графики особую роль. Принципы аналитической геометрии в соединении с постоянно расширяющимися возможностями вычислительной техники являются неиссякаемым источником существенных продвижений на пути развития компьютерной графики, ее эффективного использования в САПР.

Растровые и векторные изображения

Различают два вида изображений: растровые и векторные.
Растровое изображение состоит из множества точек - пикселей (от англ. pixel - PIcture ELement), каждый пиксель имеет определенный цвет. Чем плотнее расположены пиксели, чем меньше их размеры и чем большее количество цветов, тем выше качество картинки. Примеры растровых изображений: офсетная (газетная) печать, изображение на экране компьютера, сканированный рисунок. При хорошей разрешающей способности устройств графического вывода достигается очень высокое качество растровых изображений, но, к сожалению, работа с ними крайне неудобна, а при масштабировании качество теряется.
Векторное изображение в простейшем случае состоит не из точек, а из множества отрезков прямых, заданных координатами их концов. Такое изображение легко масштабируется без потери качества и легко поддается обработке. Практически во всех графических пакетах, используемых в САПР, информация представляется в векторном виде.

Аффинные преобразования на плоскости

Допустим, на плоскости введена прямолинейная координатная система. Тогда каждой точке M ставится в соответствие упорядоченная пара чисел (x, y) ее координат (рис. 1). Вводя на плоскости еще одну прямолинейную систему координат, поставим в соответствие той же точке M другую пару чисел - (x*, y*) .

Переход от одной прямолинейной координатной системы на плоскости к другой описывается следующими соотношениями:

(*)

где - произвольные числа, связанные неравенством:

В дальнейшем будем рассматривать формулы (*) как правило, согласно которому в заданной системе координат преобразуются точки плоскости.

В аффинных преобразованиях особую роль играют несколько важных частных случаев, имеющих хорошо прослеживаемые геометрические характеристики.

А. Поворот вокруг начальной точки на угол j (рис. 2а) описывается формулами

Б. Растяжение (сжатие) вдоль координатных осей (рис. 2б) можно задать так:

В. Отражение относительно оси абсцисс (рис. 2в) задается при помощи формул

Г. Перенос (рис. 2г) обеспечивают соотношения

Как доказывается в курсе аналитической геометрии, любое преобразование вида (*) всегда можно представить как последовательное исполнение (суперпозицию) простейших преобразований вида А, Б, В и Г.
Для эффективного использования этих известных формул в задачах компьютерной графики более удобной является их матричная запись. Матрицы, для случаев А, Б и В легко строятся и имеют соответственно следующий вид:

Для решения задач весьма желательно охватить матричным подходом все четыре простейших преобразования (в том числе и перенос), а, значит, и общее аффинное преобразование. Этого можно достичь путем описания произвольной точки плоскости не двумя координатами, как это было сделано выше, а упорядоченной тройкой чисел.

Однородные координаты точки

Пусть M - произвольная точка плоскости с координатами x и y , вычисленными относительно заданной прямолинейной координатной системы. Однородными координатами этой точки называется любая тройка одновременно неравных нулю чисел x1, x2, x3, связанными с заданными числами x и y следующими соотношениями:


При решении задач компьютерной графики однородные координаты обычно вводятся так: произвольной точке M(x, y) плоскости ставится в соответствие точка M*(x, y, 1) в пространстве (рис. 3).

При помощи троек однородных координат и матриц третьего порядка можно описать любое аффинное преобразование на плоскости. Сравнивая уравнение (*) и нижеследующее, матричное:

,

нетрудно заметить, что после перемножения выражений, стоящих в правой части последнего соотношения, получаются обе формулы (*) и тождество 1=1. Таким образом, сравниваемые записи являются равносильными.

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

Для выполнения пространственных построений, аналогично двумерной задаче, три координаты точки (x, y, z) заменяются четверкой чисел (x, y, z, 1) . Это дает возможность воспользоваться матричной записью и в более сложных трехмерных задачах.

Любое аффинное преобразование в трехмерном пространстве может быть представлено в виде суперпозиции вращений, растяжений, отражений и переносов. Математически все преобразования сводятся к перемножению матриц четвертого порядка. Например, матрица вращения вокруг оси абсцисс на угол j имеет вид:

.

Виды проецирования

Изображение трехмерных объектов на картинной плоскости связано с еще одной геометрической операцией - проецированием при помощи пучка прямых.

В компьютерной графике применяется несколько различных видов проецирования. Наиболее часто используется параллельное и центральное проецирование.

Для получения проекций объекта на картинную плоскость необходимо провести через каждую его точку прямую из заданного проецирующего пучка и затем найти координаты точки пересечения этой прямой с плоскостью изображения. В случае центрального проецирования все прямые исходят из одной точки - центра пучка. При параллельном проецировании считается, что центр пучка расположен в бесконечности (рис. 4). Математически операция проецирования также сводится к перемножению соответствующих матриц.

Тема этого выпуска задание аффинного преобразования в матричной форме. Эта тема, по сути, является обобщением всего, что было сказано ранее.

Определение. Преобразование плоскости называется аффинным , если

  • оно взаимно однозначно;
  • образом любой прямой является прямая.

Преобразование называется взаимно однозначным , если

  • разные точки переходят в разные;
  • в каждую точку переходит какая-то точка.

Однородные координаты

Если рассмотреть параллельный перенос, то оказывается, что для его задания матрицы 2x2 уже недостаточно. Но его можно задать с помощью матрицы размера 3x3. Появляется вопрос, откуда взять третью координату у двумерной точки?

Определение. Однородные координаты - координаты, обладающие тем свойством, что определяемый ими объект не меняется при умножении всех координат на одно и то же число.

Однородными координатами вектора (х, у) является тройка чисел (x", y", h) , где х = х" / h, у = y"/h, а h - некоторое вещественное число (случай, когда h = 0 является особым).

Прим. Данные координаты не позволяют однозначно задать точку плоскости. Например, (1 , 1, 1) и (2, 2, 2) задают одну и ту же точку (1, 1) . Предлагается взять набор (x, y, 1) , который будет описывать все точки плоскости.

Матрица преобразования для однородных координат имеет размер 3х3. Рассмотрим некоторые преобразования в однородных координатах.

Сжатие/растяжение

Это преобразование умножает соответствующие координаты точек на коэффициенты масштабирования по осям: (x, y ) -> (a x * x , a y * y ) . Матрица преобразования запишется следующим образом:

[ a x 0 0 ]

Где a x – растяжение по оси x ,

a y – растяжение по оси y .

Прим. Можно заметить, что при отрицательных значениях коэффициентов сжатия/растяжения происходит отражение относительно соответствующих осей. Этот случай можно включить в данное преобразование, а можно вынести в отдельное, сказав, что коэффициенты масштабирования принимают только положительные значения.

Поворот


Матрица поворота 2x2 была подробно разобрана ранее. Теперь она дополняется строкой и столбцом:

[ -sin(phi)cos(phi) 0]

Прим. При угле phi = п эта матрица задает центральную симметрию относительно начала координат, которая является частным случаем поворота. Можно заметить, что такую симметрию можно задать с помощью преобразования сжатия/растяжения (допуская отрицательные коэффициенты масштабирования).

Параллельный перенос


Исходный вектор (x, y ) переходит в (x + t x, y + t y ) . Матрица преобразования запишется следующим образом:

[ 1 0 0]

[ t x t y 1]

Отражение


Как говорилось в примечании к преобразованию сжатия/растяжения, отражения получаются следующим образом:

[-10 0]


отражение относительно оси x


отражение относительно оси y

Общий вид аффинного преобразования

Матрица 3x3, последний столбец которой равен (0 0 1) T , задает аффинное преобразование плоскости:

[ * * 0]

[ * * 0]

[ * * 1]

По одному из свойств, аффинное преобразование можно записать в виде:

f (x ) = x * R + t ,

где R – обратимая матрица 2 x2, а t – произвольный вектор. В однородных координатах это запишется следующим образом:

[ R 1,1 R 1,2 0 ]

[ R 2,1 R 2,2 0 ]

[ t x t y 1 ]

Если умножить вектор-строку на эту матрицу получаем результат преобразования:

[ xy1 ] *[ R 1,1 R 1,2 0 ]

[ R 2,1 R 2,2 0 ]

[ t x t y 1 ]

[ x’y’1 ]+[ t x t y 1 ]

При этом [ x ’ y ’ ]= R *[ x y ]

Прим. Любопытный читатель уже задал себе вопрос: в чем смысл определителя матрицы R? При аффинном преобразовании площади всех фигур изменяются в | R|. (Можно строго доказать это с точки зрения математики, но здесь этот факт приводится без доказательства.)

Т.о. аффинное преобразование представляется в виде композиции некоторого преобразования, задаваемого матрицей R , и параллельного переноса. Разберем более подробно природу этой матрицы и возможности, которые она нам дает.

Матрица R определяет новый базис плоскости. Т.е. вектор (1, 0) переходит в (R 1,1, R 1,2 ), вектор (0, 1) переходит в (R 2,1, R 2,2 ). Новый базис это строки матрицы R .

Пример.


При отражении относительно оси y , базисный вектор по оси ординат сохраняется, а по оси абсцисс переходит в (-1, 0) . Т.о. матрица R будет выглядеть следующим образом:


Теперь становится ясно, что кроме вышеперечисленных преобразований, с помощью аффинного преобразования можно получить скос:


Выше приведены базовые сведения о таком мощном инструменте, как аффинное преобразование. Остается много вопросов: какой подкласс аффинных преобразований сохраняет углы между прямыми? Как можно представить аффинное преобразование в виде композиции нескольких подклассов? Как задавать более сложные преобразования, например, осевая симметрия относительно произвольной прямой?

Ответы на эти вопросы и более детальное рассмотрение аффинного преобразования будут приведены отдельно, в качестве раздела курса теоретической геометрии.

Остановимся на практической реализации аффинного преобразования в виде демонстрационной программы. К возможностям приложения, демонстрирующего поворот плоскости мышью, добавляются функции параллельного переноса при нажатой клавише CTRL .

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

  • блок, в котором происходит создание окна и обрабатываются сообщения операционной системы, реализован в файл emain . cpp
  • графический движок, выполняющий отрисовку изображения, класс Engine
  • прослойка, необходимая для преобразования логических координат в оконные и обратно, класс Viewport
  • объект, отвечающий за реакцию на действия пользователя, класс Action

В приведенном примере реализованы эти функциональные блоки, с подробными комментариями.