Поворот (вращение) примитивов

Методы обработки векторной графики

В качестве устройства вывода векторных изображений могут применяться плоттеры, графопостроители и другие устройства, использующие векторный способ формирования изображений. Обработка двухмерной и трехмерной графики и трехмерной графики имеют много общего. Фактически в векторном описании изображения отсутствует третья координата — Поворот (вращение) примитивов - student2.ru .

Геометрические преобразования двухмерной графики.

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

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

С помощью операций преобразования можно выполнять следующие действия:

- синтезировать изображения из более мелких элементов (примитивов, сегментов);

- добавлять к существующему изображению новые элементы;

- увеличивать и уменьшать размеры рисунка;

- перемещать, вращать, копировать изображения;

- создавать движущиеся изображения.

Наиболее распространенными базовыми операциями по преобразованию векторных изображений являются:

- перенос (перемещение) примитивов, сегментов и изображений;

- масштабирование (увеличение или уменьшение размеров) изображения;

- поворот изображения или его выделенных элементов (вращение, изменение ориентации).

Эти операции называются аффинными преобразованиями. Различают двухмерные и трехмерные аффинные преобразования.

Двухмерные аффинные преобразования.

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

Перенос примитивов.

Перенос точки.

Пусть необходимо осуществить перенос точки Поворот (вращение) примитивов - student2.ru с координатами Поворот (вращение) примитивов - student2.ru , Поворот (вращение) примитивов - student2.ru - приращение координаты Поворот (вращение) примитивов - student2.ru , Поворот (вращение) примитивов - student2.ru - приращение координаты Поворот (вращение) примитивов - student2.ru . Тогда точка Поворот (вращение) примитивов - student2.ru с координатами Поворот (вращение) примитивов - student2.ru будет получена после переноса (рис. 1).

Поворот (вращение) примитивов - student2.ru

Рис. 1. Перенос точки

Новые координаты точки будут определяться соотношением

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru .

Аффинные преобразования обычно записываются в матричной форме:

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru .

Тогда Поворот (вращение) примитивов - student2.ru .

Перенос отрезка.

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

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru .

Поворот (вращение) примитивов - student2.ru

Рис. 2. Перенос отрезка

В матричной форме эти преобразования можно представить в следующем виде:

Поворот (вращение) примитивов - student2.ru – исходный отрезок;

Поворот (вращение) примитивов - student2.ru – полученный отрезок;

Поворот (вращение) примитивов - student2.ru – вектор переноса.

Итоговый вид преобразования в векторной форме Поворот (вращение) примитивов - student2.ru .

Масштабирование.

Масштабирование выполняется умножением координат на некоторые коэффициенты Поворот (вращение) примитивов - student2.ru , Поворот (вращение) примитивов - student2.ru .

Масштабирование точки.

Пусть дана точка Поворот (вращение) примитивов - student2.ru .

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

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru .

Масштабирование отрезка.

Поворот (вращение) примитивов - student2.ru – исходный отрезок;

Поворот (вращение) примитивов - student2.ru – полученный отрезок;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru .

Масштабирование бывает:

- однородное, когда Поворот (вращение) примитивов - student2.ru ;

- неоднородное, когда Поворот (вращение) примитивов - student2.ru .

При неоднородном масштабировании фигура может изменяться (круг - эллипс).

Масштабирование также делится по значению коэффициента масштабирования Поворот (вращение) примитивов - student2.ru (рис.3, 4).

Поворот (вращение) примитивов - student2.ru Поворот (вращение) примитивов - student2.ru Поворот (вращение) примитивов - student2.ru

Рис. 3. Масштабирование с коэффициентом Поворот (вращение) примитивов - student2.ru

Поворот (вращение) примитивов - student2.ru Поворот (вращение) примитивов - student2.ru Поворот (вращение) примитивов - student2.ru

Рис. 4. Масштабирование с коэффициентом Поворот (вращение) примитивов - student2.ru

Поворот (вращение) примитивов.

Пусть необходимо осуществить поворот точки Поворот (вращение) примитивов - student2.ru на угол Поворот (вращение) примитивов - student2.ru (рис. 5).

Поворот (вращение) примитивов - student2.ru

Рис. 5. Поворот в плоскости системы координат

Исходные координаты точки:

Поворот (вращение) примитивов - student2.ru ; (1.1)

Поворот (вращение) примитивов - student2.ru .

После поворота точка Поворот (вращение) примитивов - student2.ru будет иметь координаты:

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru . (1.2)

Преобразуем выражение (2.2):

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru . (1.3)

Подставим (1.1) в (1.3):

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru . (1.4)

В матричной форме поворот записывается следующим образом:

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru ;

Поворот (вращение) примитивов - student2.ru .

Тогда в векторной форме Поворот (вращение) примитивов - student2.ru .

Поворот считается положительным ( Поворот (вращение) примитивов - student2.ru ), если он осуществляется против часовой стрелки; отрицательным – если по часовой.

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

Пусть задан отрезок, определенный координатами:

Поворот (вращение) примитивов - student2.ru .

1. Перенос Поворот (вращение) примитивов - student2.ru , Поворот (вращение) примитивов - student2.ru :

Поворот (вращение) примитивов - student2.ru .

2. Масштабирование Поворот (вращение) примитивов - student2.ru :

Поворот (вращение) примитивов - student2.ru .

3. Поворот Поворот (вращение) примитивов - student2.ru градусов:

Поворот (вращение) примитивов - student2.ru .

Наши рекомендации