Ниже \(f\) обозначает аффинное преобразование, записываемое в декартовой системе координат \(O, \boldsymbol{e}_{1}, \boldsymbol{e}_{2}\) формулами
$$
x^{*}=a_{1}x+b_{1}y+c_{1},\ y^{*}=a_{2}x+b_{2}y+c_{2}.\label{ref1}
$$
при условии
$$
\begin{vmatrix}
a_{1}& b_{1}\\
a_{2}& b_{2}
\end{vmatrix} \neq 0.\label{ref2}
$$
Рассмотрим на плоскости прямую линию с уравнением \(\boldsymbol{r}=\boldsymbol{r}_{0}+\boldsymbol{a}t\) и найдем ее образ при преобразовании \(f\). (Под образом прямой понимается множество образов ее точек.) Радиус-вектор образа \(M^{*}\) произвольной точки \(M\) можно вычислить так:
$$
\overrightarrow{OM^{*}}=\overrightarrow{Of(O)}+f\overrightarrow{(O)M^{*}}=\boldsymbol{c}+f(\boldsymbol{r}).\nonumber
$$
Здесь \(\boldsymbol{c}\) - постоянный вектор \(\overrightarrow{Of}(O)\), а \(\boldsymbol{r}\) - радиус-вектор точки \(M\). Согласно (11) §2 мы получаем
$$
\overrightarrow{OM^{*}}=\boldsymbol{c}+f(\boldsymbol{r}_{0})+f(\boldsymbol{a})t.\label{ref3}
$$
Так как \(f\) - аффинное преобразование и \(\boldsymbol{a} \neq \boldsymbol{0}\), то \(\boldsymbol{a}\) перейдет в вектор \(f(\boldsymbol{a}) \neq 0\), и уравнение \eqref{ref3} является уравнением прямой линии. Итак, образы всех точек прямой \(\boldsymbol{r}=\boldsymbol{r}_{0}+\boldsymbol{a}t\) лежат на прямой \eqref{ref3}.
Более того, преобразование \(f\) определяет взаимно однозначное отображение одной прямой на другую, так как при сделанном здесь выборе начальных точек и направляющих векторов точка \(M^{*}\) имеет на прямой \eqref{ref3} то же значение параметра \(t\), что и точка \(M\) на исходной прямой. Отсюда мы получаем первое утверждение.
Утверждение 1.
При аффинном преобразовании:
- прямая линия переходит в прямую линию;
- отрезок переходит в отрезок;
- параллельные прямые переходят в параллельные.
Доказательство.
Для доказательства второго утверждения достаточно заметить, что отрезок прямой состоит из таких точек, у которых значения параметра удовлетворяют неравенству вида \(t_{1} \leq t \leq t_{2}\) Третье утверждение следует из того, что при аффинном преобразовании коллинеар-ные векторы переходят в коллинеарные.
Утверждение 2.
При аффинном преобразовании отношение длин параллельных отрезков не изменяется.
Доказательство.
Пусть отрезки \(AB\) и \(CD\) параллельны. Это значит, что существует такое число \(\lambda\), что \(\overrightarrow{AB}=\lambda \overrightarrow{CD}\). Образы векторов \(\overrightarrow{AB}\) и \(\overrightarrow{CD}\) связаны той же зависимостью \(\overrightarrow{A^{*}B^{*}}=\lambda \overrightarrow{C^{*}D^{*}}\). Отсюда вытекает, что
$$
\frac{|\overrightarrow{AB}|}{|\overrightarrow{CD}|}=\frac{|\overrightarrow{A^{*}B^{*}}|}{|\overrightarrow{C^{*}D^{*}}|}=|\lambda|.\nonumber
$$
Следствие.
Если точка \(C\) делит отрезок \(AB\) в некотором отношении \(\lambda\), то ее образ \(C^{*}\) делит образ \(A^{*}B^{*}\) отрезка \(AB\) в том же отношении \(\lambda\).
Изменение площадей при аффинном преобразовании.
Для начала рассмотрим . Выберем общую декартову систему координат \(O, \boldsymbol{e}_{1}, \boldsymbol{e}_{2}\) и обозначим через \((p_{1}, p_{2})\) и \((q_{1}, q_{2})\) компоненты векторов \(\boldsymbol{p}\) и \(\boldsymbol{q}\), на которых он построен. Площадь параллелограмма мы можем вычислить, пользуясь :
$$
S_{\pm}=S_{\pm} (\boldsymbol{p}, \boldsymbol{q})=(p_{1}q_{2}-p_{2}q_{1}) S_{\pm} (\boldsymbol{e}_{1}, \boldsymbol{e}_{2}).\nonumber
$$
Пусть аффинное преобразование \(f\) записывается в выбранной системе координат формулами \eqref{ref1}. Из ранее доказанного следует, что векторы \(f(\boldsymbol{p})\) и \(f(\boldsymbol{q})\) имеют в базисе \(f(\boldsymbol{e}_{1}), f(\boldsymbol{e}_{2})\) те же компоненты \((p_{1}, p_{2})\) и \((q_{1}, q_{2})\), что и векторы \(\boldsymbol{p}\) и \(\boldsymbol{q}\) в базисе \(\boldsymbol{e}_{1}, \boldsymbol{e}_{2}\). Образ параллелограмма построен на векторах \(f(\boldsymbol{p})\) и \(f(\boldsymbol{q})\), и площадь его равна
$$
S_{\pm}^{*}=S_{\pm} (f(\boldsymbol{p}), f(\boldsymbol{q}))=(p_{1}q_{2}-p_{2}q_{1}) S_{\pm} (f(\boldsymbol{e}_{1}), f(\boldsymbol{e}_{2})).\nonumber
$$
Вычислим последний множитель. Как мы знаем из уже доказанного , координаты векторов \(f(\boldsymbol{e}_{1}), f(\boldsymbol{e}_{2})\) равны соответственно \((a_{1}, a_{2})\) и \((b_{1}, b_{2})\). Поэтому \(S_{\pm} (f(\boldsymbol{e}_{1}), f(\boldsymbol{e}_{2}))=(a_{1}b_{2}-a_{2}b_{1}) S_{\pm} (\boldsymbol{e}_{1}, \boldsymbol{e}_{2})\) и
$$
S_{\pm}^{*}=(p_{1}q_{2}-p_{2}q_{1})(a_{1}b_{2}-a_{2}b_{1}) S_{\pm} (\boldsymbol{e}_{1}, \boldsymbol{e}_{2}).\nonumber
$$
Отсюда мы видим, что
$$
\frac{S_{\pm}^{*}}{S_{\pm}}=\begin{vmatrix}
a_{1}& b_{1}\\
a_{2}& b_{2}
\end{vmatrix}.\label{ref4}
$$
Таким образом, отношение площади образа ориентированного параллелограмма к площади этого параллелограмма одинаково для всех параллелограммов и равно \(a_{1}b_{2}-a_{2}b_{1}\).
Отсюда следует, что данный детерминант не зависит от выбора системы координат, в которой записано преобразование, хотя он вычисляется по коэффициентам, зависящим от системы координат. Эта величина - инвариант, выражающий геометрическое свойство преобразования.
Из формулы \eqref{ref4} видно, что отношение площади образа неориентированного параллелограмма к его площади равно
$$
S^{*}/S=|a_{1}b_{2}-a_{2}b_{1}|.\label{ref5}
$$
Если \(a_{1}b_{2}-a_{2}b_{1} > 0\), то ориентации всех ориентированных параллелограммов сохраняются при преобразовании, а если \(a_{1}b_{2}-a_{2}b_{1} < 0\), то для каждого ориентированного параллелограмма ориентация образа противоположна его ориентации.
Займемся теперь площадями других фигур. Каждый треугольник может быть дополнен до параллелограмма, площадь которого равна удвоенной площади треугольника. Поэтому отношение площади образа треугольника к площади этого треугольника удовлетворяет равенству \eqref{ref5}.
Каждый многоугольник может быть разбит на треугольники. Следовательно, формула \eqref{ref5} справедлива и для произвольных многоугольников.
Мы не будем здесь касаться определения площади произвольной криволинейной фигуры. Скажем лишь, что в тех случаях, когда эта площадь определена, она равна пределу площадей некоторой последовательности многоугольников, вписанных в рассматриваемую фигуру. Из теории пределов известно следующее предположение: если последовательность \(S_{n}\) стремится к пределу \(S\), то последовательность \(\delta S_{n}\), где \(\delta\) постоянное, стремится к пределу \(\delta S\). На основании этого предложения мы заключаем, что формула \eqref{ref5} справедлива в самом общем случае.
В качестве примера найдем выражение площади эллипса через его полуоси. Ранее мы , что эллипс с полуосями \(a\) и \(b\) может быть получен сжатием окружности радиуса \(a\) к прямой, проходящей через ее центр. Коэффициент сжатия равен \(b/a\). В одном из мы получили координатную запись сжатия к прямой \(x^{*}=x\), \(y^{*}=\lambda y\). Детерминант из коэффициентов в этих формулах равен \(\lambda\), то есть в нашем случае \(b/a\). Таким образом, отношение площади эллипса к площади окружности равно \(b/a\), и эта площадь равна \(S=(b/a)\pi a^{2}\). Окончательно имеем
$$
S=\pi ab.\nonumber
$$
Образы линий второго порядка.
Мы видели, что прямая линия переходит в прямую. Это частный случай следующего утверждения.
Утверждение 3.
Аффинное преобразование переводит алгебраическую линию в алгебраическую линию того же порядка.
Доказательство.
В самом деле, пусть линия \(L\) в декартовой системе координат \(O, \boldsymbol{e}_{1}, \boldsymbol{e}_{2}\) имеет алгебраическое уравнение порядка \(p\). Мы уже , что образы всех точек линии \(L\) при аффинном преобразовании \(f\) имеют в системе координат \(f(O), f(\boldsymbol{e}_{1}), f(\boldsymbol{e}_{2})\) те же координаты, что и их прообразы в системе координат \(O, \boldsymbol{e}_{1}, \boldsymbol{e}_{2}\). Следовательно, координаты образов в системе \(f(O), f(\boldsymbol{e}_{1}), f(\boldsymbol{e}_{2})\) связаны тем же алгебраическим уравнением порядка \(p\). Этого достаточно, чтобы сделать нужное нам заключение.
Из доказанного выше утверждения, в частности, следует, что линия второго порядка при аффинном преобразовании перейдет в линию второго порядка. Мы докажем более сильное утверждение. Как мы уже знаем, линии второго порядка можно разделить на . Мы увидим, что класс линии сохраняется при аффинном преобразовании. На этом основании классы линий, перечисленные в указанной теореме, называются аффинными классами. Итак, докажем новое утверждение.
Утверждение 4.
Линия второго порядка, принадлежащая к одному из аффинных классов, при любом аффинном преобразовании может перейти только в линию того же класса. Каждую линию второго порядка подходящим аффинным преобразованием можно перевести в любую другую линию того же аффинного класса.
Доказательство.
Линию мы назовем ограниченной, если она лежит внутри некоторого параллелограмма. Легко видеть, что при аффинном преобразовании ограниченная линия должна перейти в ограниченную, а неограниченная - в неограниченную.
- Эллипс - ограниченная линия второго порядка. Кроме эллипсов ограничены только линии, состоящие из одной точки, то есть пары мнимых пересекающихся прямых. Поскольку эллипс ограничен и состоит больше, чем из одной точки, он может перейти только в эллипс.
- Гипербола состоит из двух отдельных ветвей. Это свойство можно сформулировать так, что будет ясна его неизменность при аффинных преобразованиях. Именно, существует прямая линия, не пересекающая гиперболу, но пересекающая некоторые ее хорды.Из всех линий второго порядка только гиперболы и пары параллельных прямых обладают этим свойством. У гиперболы ветви не прямые линии, и потому при аффинном преобразовании она может перейти только в гиперболу.
- Парабола - неограниченная линия второго порядка, состоящая из одного непрямолинейного куска. Этим свойством не обладают никакие другие линии второго порядка, и потому парабола может перейти только в параболу.
- Если линия второго порядка представляет собой точку (пару мнимых пересекающихся прямых), прямую (пару совпавших прямых), пару пересекающихся или пару параллельных прямых, то из доказанных ранее свойств аффинных преобразований следует, что эта линия не может перейти в линию никакого другого класса.
Докажем вторую часть предложения. В уже доказанной нами канонические уравнения линий второго порядка написаны в декартовой прямоугольной системе координат и содержат параметры \(a, b, …\) Если мы откажемся от ортонормированности базиса, то сможем произвести дальнейшие упрощения канонических уравнений и привести их к виду, не содержащему параметров. Например, замена координат \(x’=x/a\), \(y’=y/b\) переводит уравнение эллипса \(x^{2}a^{2}+y^{2}b^{2}=1\) в уравнение \(x’^{2}+y’^{2}=1\), каковы бы ни были \(a\) и \(b\). (Последнее уравнение не есть уравнение окружности, так как новая система координат не декартова прямоугольная.)
Читатель без труда покажет, что канонические уравнения линий второго порядка переходом к подходящей системе координат могут быть преобразованы в уравнения:
- \(x^{2}+y^{2}=1\);
- \(x^{2}+y^{2}=0\);
- \(x^{2}-y^{2}=1\);
- \(x^{2}-y^{2}=0\);
- \(y^{2}=2x\);
- \(y^{2}-1=0\);
- \(y^{2}=0\).
Такую систему координат мы назовем аффинной канонической системой координат.
Из ранее следует, что аффинное преобразование, которое совмещает аффинные канонические системы координат двух линий одного аффинного класса, совмещает и эти линии. Это заканчивает доказательство.
Разложение ортогонального преобразования.
Теорема 1.
Каждое ортогональное преобразование раскладывается в произведение параллельного переноса, поворота и, возможно, осевой симметрии.
Доказательство.
Пусть \(f\) - ортогональное преобразование и \(\vartriangle ABC\) - равнобедренный прямоугольный треугольник с прямым углом \(A\). При преобразовании \(f\) он перейдет в равный ему треугольник \(\vartriangle A^{*}B^{*}C^{*}\) с прямым углом при вершине \(A^{*}\). Теорема будет доказана, если, производя последовательно параллельный перенос \(p\), поворот \(q\) и (в случае необходимости) осевую симметрию \(r\), мы сможем совместить треугольники \(ABC\) и \(A^{*}B^{*}C^{*}\). Действительно, произведение \(rqp\) - аффинное преобразование так же, как и \(f\), а аффинное преобразование однозначно определяется образами трех точек, не лежащих на одной прямой. Поэтому \(rqp\) совпадает с \(f\).
Итак, переведем \(A\) и \(A^{*}\) параллельным переносом \(p\) на вектор \(\overrightarrow{AA^{*}}\) (если \(A=A^{*}\), то \(p\) - тождественное преобразование). Затем поворотом \(q\) вокруг точки \(A^{*}\) совместим \(p(B)\) с \(B^{*}\) (возможно, и это преобразование окажется тождественным). Точка \(q(p(C))\) либо совпадает с \(C^{*}\), либо симметрична ей относительно прямой \(A^{*}B^{*}\). В первом случае цель уже достигнута, а во втором потребуется осевая симметрия относительно указанной прямой. Теорема доказана.
Следует иметь в виду, что полученное разложение ортогонального преобразования не однозначно. Более того, можно поворот или параллельный перенос разложить в произведение осевых симметрий, произведение параллельного переноса и поворота представить как один поворот и так далее. Мы не будем уточнять, как это сделать, а выясним следующее общее свойство всех таких разложений.
Утверждение 5.
При любом разложении ортогонального преобразования в произведение любого числа параллельных переносов, поворотов и осевых симметрий четность числа осевых симметрий, входящих в разложение, одна и та же.
Доказательство.
Для доказательства рассмотрим на плоскости произвольный базис и проследим за изменением его ориентации (направления кратчайшего поворота от \(\boldsymbol{e}_{1}\) к \(\boldsymbol{e}_{2}\)) при осуществляемых преобразованиях. Заметим, что поворот и параллельный перенос не меняют ориентацию ни одного базиса, а осевая симметрия меняет ориентацию любого базиса. Поэтому, если данное ортогональное преобразование меняет ориентацию базиса, то в любое его разложение должно входить нечетное число осевых симметрий. Если же ориентация базиса не меняется, то число осевых симметрий, входящих в разложение, может быть только четным.
Определение.
Ортогональные преобразования, которые могут быть разложены в произведение параллельного переноса и поворота, называются ортогональными преобразованиями первого рода , а остальные - ортогональными преобразованиями второго рода .
Ортогональное преобразование в декартовой прямоугольной системе координат записывается :
$$
\begin{array}{cc}
\end{array}.\nonumber
$$
При верхних знаках коэффициентов у \(y\) в этих формулах детерминант, составленный из коэффициентов, равен +1, а при нижних знаках он равен -1. Отсюда и из формулы \eqref{ref4} следует следующее утверждение.
Утверждение 6.
Ортогональное преобразование первого рода записывается в декартовой прямоугольной системе координат формулами
$$
\begin{array}{cc}
& x^{*}=x \cos \varphi \mp y \sin \varphi+c_{1},\\
& y^{*}=x \sin \varphi \pm y \cos \varphi+c_{2}.
\end{array}.\nonumber
$$
с верхними знаками у коэффициентов при \(y\), а ортогональное преобразование второго рода - с нижними знаками.
Разложение аффинного преобразования.
Мы видели, насколько аффинное преобразование может изменить плоскость: окружность может перейти в эллипс, правильный треугольник - в совершенно произвольный. Казалось бы, никакие углы при этом сохраниться не могут. Однако имеет место следующее утверждение
Утверждение 7.
Для каждого аффинного преобразования существуют две взаимно перпендикулярные прямые, которые переходят во взаимно перпендикулярные прямые.
Доказательство.
Для доказательства рассмотрим какую-либо окружность. При данном аффинном преобразовании она перейдет в эллипс. Каждая ось эллипса - множество середин хорд, параллельных другой оси. При аффинном преобразовании хорда перейдет в хорду, параллельность должна сохраниться, а середина отрезка переходит в середину его образа. Поэтому прообразы осей эллипса - отрезки, обладающие тем же свойством: каждый из них есть множество середин хорд окружности, параллельных другому отрезку. Такие отрезки непременно являются двумя взаимно перпендикулярными диаметрами окружности. Это то, что нам требовалось: существуют два взаимно перпендикулярных диаметра окружности, которые переходят во взаимно перпендикулярные отрезки - оси эллипса.
Стоит отметить один особый случай: окружность при аффинном преобразовании может перейти в окружность. В этом случае то же рассуждение проходит с любыми двумя взаимно перпендикулярными диаметрами окружности-образа. Очевидно, что при этом любые два взаимно перпендикулярных направления остаются перпендикулярными.
Определение.
Два взаимно перпендикулярных направления называются главными или синугулярными направлениями аффинного преобразования \(f\), если они переходят во взаимно перпендикулярные направления.
Теорема 2.
Каждое аффинное преобразование раскладывается в произведение ортогонального преобразования и двух сжатий к двум взаимно перпендикулярным прямым.
Доказательство.
Доказательство аналогично доказательству . Рассмотрим аффинное преобразование \(f\) и выберем равнобедренный прямоугольный треугольник \(ABC\) так, чтобы его катеты \(AB\) и \(AC\) были направлены вдоль главных направлений преобразования \(f\). Обозначим через \(A^{*}\), \(B^{*}\) и \(C^{*}\) образы его вершин. Сделаем такое ортогональное преобразование \(g\), при котором \(g(A)=A^{*}\), а точки \(g(B)\) и \(g(C)\) лежат соответственно на лучах \(A^{*}B^{*}\) и \(A^{*}C^{*}\). (Этого легко добиться, как и в теореме 1, параллельным переносом, поворотом и осевой симметрией.)
Пусть \(\lambda=|A^{*}B^{*}|/|A^{*}g(B)|\), a \(\mu=|A^{*}C^{*}|/|A^{*}g(C)|\). Тогда сжатие \(p_{1}\) к прямой \(A^{*}C^{*}\) в отношении \(\lambda\) переведет \(g(B)\) в \(p_{1}g(B)=B^{*}\) и не сдвинет точек \(A^{*}\) и \(g(C)\). Аналогично, сжатие \(p_{2}\) к прямой \(A^{*}B^{*}\) переведет \(g(C)\) в \(p_{2}g(C)=C^{*}\) и не сдвинет точек прямой \(A^{*}B^{*}\).
Это означает, что произведение \(p_{2}p_{1}g\) переводит точки \(A\), \(B\) и \(C\) в точки \(A^{*}\), \(B^{*}\) и \(C^{*}\) так же, как и заданное нам преобразование \(f\). Согласно ранее доказанному имеем \(p_{2}p_{1}g=f\), как и требовалось.
Аффинное преобразование это такое преобразование, которое сохраняет параллельность линий, но не обязательно углы или длины.
В компьютерной графике все, что относится к двумерному случаю, принято обозначать символом 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 описывают суммарный перенос.
К изложенным фундаментальным преобразованиям сводятся следующие:
прокручивание
перемещение окна на поверхности визуализации (если перемещение ограничено только направлениями вверх и вниз, то оно называется вертикальным прокручиванием);
трансфокация
постепенное изменение масштаба изображения;
кувыркание
динамическое изображение примитивов вывода, вращающихся вокруг некоторой оси, ориентация которой непрерывно изменяется в пространстве;
панорамирование
постепенный перенос изображения с целью создания зрительного ощущения движения.
Любое сложное аффинное преобразование, можно представить композицией нескольких элементарных аффинных преобразований. Анализ показывает, что в 2D-графике существуют четыре элементарные аффинные преобразования – поворот, растяжение, отражение, перенос.
Поворот .
Рассмотрим поворот произвольной точки A вокруг начала координат на угол(Рис. 6).
Элементарное аффинное преобразование – поворот на угол .
Из аналитической геометрии известно, что поворот описывается следующим аффинным преобразованием.
(5)
Удобно координаты точки объединить в виде 2-х мерного вектора (столбика). Тогда переход точки A в положение точкиA
(6)
В этих обозначениях поворот можно выразить в виде матричного умножения.
(7)
Здесь R – матрица поворота (Rotation- вращение). Структуру этой матрицы получаем из уравнений (5).
(8)
Растяжение-сжатие, масштабирование.
Рассмотрим операцию растяжения-сжатия
вдоль координатных осей с коэффициентами
растяжения k
1 ,k
2 . Часто эту
операцию называют масштабированием
(Scaling- масштабирование).
Для примера покажем (Рис. 7) растяжение
отрезка с коэффициентами растяжения
равными.
Элементарное аффинное преобразование
– растяжение с коэффициентами
.
Растяжение описывается следующим аффинным преобразованием.
(9)
Преобразование (9) можно выразить в виде матричного умножения.
(10)
Здесь S – матрица масштабирования. Структуру этой матрицы получаем из уравнений (9).
(11)
Отражение.
Рассмотрим операцию отражения относительно координатных осей. Для примера покажем (Рис. 8) отражение относительно оси x .
Элементарное аффинное преобразование – отражение относительно оси Ox.
Отражение описывается следующим аффинным преобразованием.
(12)
Преобразование (12) можно выразить в виде матричного умножения.
(13)
Здесь M – матрица отражения (Mirror– зеркало, отражение). Структуру этой матрицы получаем из уравнений (12).
(14)
Аналогично находим матрицу отражения относительно оси y .
(15)
Перенос.
Рассмотрим операцию переноса на вектор
трансляции
.
При этой операции любой объект перемещается
без искажения, и любая сторона остается
параллельной самой себе. Для примера
покажем на рисунке 9 перенос отрезка.
Элементарное аффинное преобразование – перенос на вектор трансляции t .
Перенос описывается следующим аффинным преобразованием.
(16)
Преобразование (16) нам хотелось бы выразить в виде матричного умножения тип.
(17)
Здесь T – должна быть матрицей трансляции (Translation– трансляция, перенос). Однако невозможно построить матрицуT размерностью 22, чтобы одновременно удовлетворялись уравнения (16) и (17).
И все же, такую матрицу можно создать, если формально рассматривать аффинные 2D-преобразования в 3-х мерном пространстве. Для этого надо перейти к однородным координатам.
Однородные координаты.
Понятие однородных координат пришло к нам из проективной геометрии. Пусть точка A лежит на плоскости и имеет координаты (x ,y ). Тогдаоднородными координатами этой точки называется любая тройка чиселx 1 ,x 2 ,x 3 , связанных с заданными числамиx иy следующими соотношениями.
(18)
При решении задач компьютерной графики в качестве однородных координат обычно выбирают следующую тройку чисел.
Таким образом, произвольной точке A (x ,y ) плоскости ставится в соответствие точкаA (x ,y , 1) в пространстве. По сути дела мы рассматриваем аффинные преобразования в плоскостиz = 1 , как это показано на рисунке 10.
Аффинное преобразование в однородных координатах.
Координаты точек лежащих в плоскости z = 1 объединяем в виде 3-х мерных векторов. Переход точкиA в положение точкиA * можно представить, как преобразование векторов.
(20)
В этих обозначениях общее аффинное преобразование (1) можно выразить в виде матричного умножения.
(21)
Здесь матрица P размерности 33 является матрицей общего аффинного преобразования (1) и имеет вид.
(22)
Отметим важный момент , связанный с однородными координатами. Переход к трехмерным векторам и матрицам (20, 21, 22) можно было выполнить совершенно формально, не привязываясь к реальному трехмерному пространству (x,y,z). Этот подход позволяет для 3D-аффинных преобразований ввести однородные координаты и производить матричные умножения в 4-х мерном векторном пространстве.
Введенные раньше матрицы элементарных аффинных преобразований, теперь в однородных координатах примут следующий вид.
Матрица поворота R в однородных координатах будет иметь следующий вид.
(23)
Матрица растяжения S изменится следующим образом.
(24)
Матрицы отражения M относительно координатных осей будут иметь вид.
(25)
Матрица переноса T
на
вектор трансляциив однородных координатах будет иметь
следующий вид.
(26)
Тема этого выпуска задание аффинного преобразования в матричной форме. Эта тема, по сути, является обобщением всего, что было сказано ранее.
Определение. Преобразование плоскости называется аффинным , если
- оно взаимно однозначно;
- образом любой прямой является прямая.
Преобразование называется взаимно однозначным , если
- разные точки переходят в разные;
- в каждую точку переходит какая-то точка.
Однородные координаты
Если рассмотреть параллельный перенос, то оказывается, что для его задания матрицы 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
В приведенном примере реализованы эти функциональные блоки, с подробными комментариями.
УДК 004.932
Кудрина М.А., Мурзин А.В.
ФГБОУ ВПО "Самарский государственный аэрокосмический университет им. ак. С.П. Королева (национальный исследовательский университет)", Самара, Россия
АФФИННЫЕ ПРЕОБРАЗОВАНИЯ ОБЪЕКТОВ В КОМПЬЮТЕРНОЙ ГРАФИКЕ
Одной из типовых задач, которую приходится решать средствами растровой изобразительной графики, является преобразование как всего изображения в целом, так и его отдельных фрагментов, как то: перемещение, поворот вокруг заданного центра, изменение линейных размеров и т.п.
Данная задача решается использованием аффинных преобразований (affine transformations) .
Аффинные преобразования могут быть очень полезны в следующих ситуациях:
1. Для составления плоского изображения или трехмерной сцены путем компоновки из однотипных элементов, с помощью их копирования, преобразования и перемещения в различные места изображения. Например, для создания симметричных объектов, таких, как снежинка. Можно разработать один мотив и затем составить изображение всего объекта путем отражений, поворотов и перемещений данного мотива.
2. Для просмотра трехмерных объектов с различных точек зрения. В этом случае можно зафиксировать положение камеры и поворачивать сцену или наоборот, сцену оставить неподвижной и передвигать вокруг нее камеру. Подобные манипуляции могут быть осуществлены с помощью трехмерных аффинных преобразований.
3. Для проецирования трехмерных объектов на плоскость и отображения сцены в окне. Так, например, для аксонометрического проецирования используется последовательность двух поворотов плоскости проецирования, а для отображения в окне - совокупность масштабирования и перемещения.
Аффинные преобразования на плоскости в общем виде описываются следующими формулами:
J X = Ax + By + C, . Программа позволяет автоматизировать процесс составления тестовых задач.
ЛИТЕРАТУРА
1. Порев В. Н. Компьютерная графика. - СПб.: БХВ-Петербург, 2002. - 432 с. : ил.
2. Хилл Ф. Open GL. Программирование компьютерной графики. Для профессионалов. - СПб.:Питер,
2002. - 1088с.:ил. ISBN 5-318-00219-6
3. Кудрина М.А., Кудрин К.А., Вытягов А.А., Ионов Д.О. Разработка системы дистанционного обучения для курса "Компьютерная графика" с помощью Moodle: Труды международного симпозиума Надежность и качество. 2010. Т. I. С. 165.
4. Кудрина М.А., Кудрин К.А., Дегтярева О.А. Аттестационный педагогический измерительный материал по курсу "Компьютерная графика"// Надежность и качество 2008. Труды межд. симпозиума. Пенза, 2008, С. 162-163.
5. Кудрина М.А. Использование аттестационно-педагогических измерительных материалов по курсу
"Компьютерная графика" в учебном процессе"//Образование - инвестиции в успех: Материалы науч.-