2D преобразования

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    25,66 Кб
  • Опубликовано:
    2015-06-12
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

2D преобразования













Лабораторная работа

Тема «2D преобразования»

Задание

Создайте приложение Windows Applications. Вид приложения приведен на рис. ниже.

Рис. 1

Имена переменным дайте согласно нотации:

Командная кнопка btnName.

Переключатель rbName.

Текстовое поле tbName.

На форме разместите элемент panel, для него можно оставить имя по умолчанию panel1.

Добавьте событие Paint для элемента panel.

В программе используется класс Matrix для него добавьте в проект директиву:System.Drawing.Drawing2D;

Методические указания:

Создайте приложение на языке C# Windows Form. Установите элементы управления на форму как видно на рисунке выше. Для отрисовки графика установите на форму элемент Picture. Напишите программный код для реализации 2D преобразований, программа должна переносить, поворачивать и масштабировать объект. Для выполнения преобразований каждую точку объекта представьте в виде матрицы координат вершины. Преобразования производите с матричными объектами.

Краткие теоретические сведения для выполнения лабораторной работы.

Интерфейс GDI+ позволяет хранить аффинные преобразования в объекте Matrix. Так как третий столбец матрицы, задающей аффинное преобразование, всегда равен (0, 0, 1), при создании объекта Matrix нужно задавать только шесть чисел в первых двух столбцах. Инструкция Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) создает матрицу, изображенную на следующем рисунке.

язык матрица преобразование

Рис. 2


1. Композиция преобразований или составные преобразования

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

Матрица A Поворот на 90 градусов.

Матрица B Масштабирование по оси X с коэффициентом 2.

Матрица C Сдвиг на три единицы по оси Y.

Если взять матричное представление для точки с координатами (2, 1) - [2 1 1] - и последовательно умножить его на матрицу A, затем на B, а затем на C, точка (2, 1) последовательно подвергнется трем соответствующим преобразованиям.

[2 1 1]ABC = [-2 5 1]

Вместо того чтобы хранить три части составного преобразования в отдельных матрицах, можно перемножить матрицы A, B и C и получить одну матрицу размером 3×3, содержащую все составное преобразование. Предположим, что ABC = D. Тогда умножение точки на матрицу D приводит к тому же результату, что и умножение точки на матрицы A, B и C.

[2 1 1]D = [-2 5 1]

На приведенном ниже рисунке показаны матрицы A, B, C и D.


Класс Matrix содержит несколько методов для составных преобразований: Multiply, Rotate, RotateAt, Scale, Shear и Translate. В приведенном ниже примере демонстрируется создание матрицы составного преобразования, реализующей поворот на 30 градусов, затем масштабирование вдоль оси Y с коэффициентом 2 и сдвиг на 5 единиц вдоль оси X.

Matrix myMatrix = new Matrix();.Rotate(30);.Scale(1, 2, MatrixOrder.Append);.Translate(5, 0, MatrixOrder.Append);

Конструкторы

Имя Описание() Инициализирует новый экземпляр класса Matrix в виде единичной матрицы.(Rectangle, Point[]) Инициализирует новый экземпляр класса Matrix для геометрического преобразования, определяемого указанным прямоугольником и массивом точек.(RectangleF, PointF[]) Инициализирует новый экземпляр класса Matrix для геометрического преобразования, определяемого указанным прямоугольником и массивом точек.(Single, Single, Single, Single, Single, Single) Инициализирует новый экземпляр класса Matrix с указанными элементами.

Методы

Имя ОписаниеСоздает точную копию этого объекта Matrix.Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject.)Освобождает все ресурсы, используемые данным объектом Matrix.Проверяет, является ли заданный объект объектом Matrix и идентичен ли он этому объекту Matrix. (Переопределяет Object.Equals(Object).)Позволяет объекту Object попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект Object будет утилизирован в процессе сборки мусора. (Унаследовано от Object.)Возвращает хэш-код. (Переопределяет Object.GetHashCode().)Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.)Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)Возвращает объект обслуживания во время существования для управления политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.)Обращает матрицу Matrix, если она обратима.Создает неполную копию текущего объекта Object. (Унаследовано от Object.)(Boolean) Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject.)(Matrix) Умножает эту матрицу Matrix на матрицу, указанную в параметре matrix, путем добавления указанной матрицы Matrix.(Matrix, MatrixOrder) Умножает этот объект Matrix на матрицу, указанную в параметре matrix, в порядке, задаваемом в параметре order.Сбрасывает этот объект Matrix, чтобы получить элементы единичной матрицы.(Single) Добавляет в этот объект Matrix поворот по часовой стрелке вокруг начала координат на указанный угол.(Single, MatrixOrder) Применяет поворот по часовой стрелке вокруг начала координат (нулевые координаты x и y) на величину, указанную в параметре angle, к этому объекту Matrix.(Single, PointF) Применяет поворот по часовой стрелке к этому объектуMatrix; поворот производится вокруг точки, указанной в параметре point, и путем добавления поворота в начало.(Single, PointF, MatrixOrder) Применяет поворот по часовой стрелке вокруг указанной точки к объекту Matrix в указанном порядке.(Single, Single) Применяет указанный вектор масштабирования к этому объекту Matrix, добавляя вектор масштабирования в начало.(Single, Single, MatrixOrder) Применяет указанный вектор масштабирования (scaleX и scaleY) к этому объекту Matrix в указанном порядке.(Single, Single) Применяет указанный вектор сдвига к этому объекту Matrix, добавляя преобразование сдвига в начало.(Single, Single, MatrixOrder) Применяет указанный вектор сдвига к этому объекту Matrix в указанном порядке.Возвращает объект String, который представляет текущий объект Object. (Унаследовано от Object.)(Point[]) Применяет геометрическое преобразование, представляемое этим объектом Matrix, к указанному массиву точек.(PointF[]) Применяет геометрическое преобразование, представляемое этим объектом Matrix, к указанному массиву точек.(Point[]) Применяет только компоненты масштабирования и поворота этого объекта Matrix к указанному массиву точек.(PointF[]) Умножает каждый вектор массива на матрицу. Элементы смещения данной матрицы (третья строка) игнорируются.(Single, Single) Применяет указанный вектор смещения (offsetX и offsetY) к этому объекту Matrix, добавляя вектор смещения в начало.(Single, Single, MatrixOrder) Применяет указанный вектор ссмещения к этому объекту Matrix в указанном порядке.Умножает каждый вектор массива на матрицу. Элементы смещения данной матрицы (третья строка) игнорируются.

Свойства

Имя ОписаниеПолучает массив значений с плавающей запятой, представляющий элементы этого объекта Matrix.Получает значение, определяющее, является ли объект Matrix единичной матрицей.Возвращает значение, указывающее, является ли матрица Matrix обратимой.Получает значение смещения по оси x (значение dx, или элемент на пересечении третьей строки и первого столбца) объекта Matrix.Получает значение смещения по оси y (значение dy, или элемент на пересечении третьей строки и второго столбца) для этого объекта Matrix.

Пример:

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

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

Создает матрицу, изменяет ее масштаб в 3 раза по оси X и в 2 раза по оси Y и смещает ее на 100 по обеим осям.

Выводит элементы матрицы на экран.

Применяет данное матричное преобразование к массиву точек.

Выводит преобразованный массив на экран (красный прямоугольник).

Обратите внимание, что красный прямоугольник был увеличен в 3 раза по оси X и в 2 раза по оси Y, включая левый верхний угол (начальную точку прямоугольника), но вектор смещения (последние два элемента матрицы) игнорируется.

public void TransformVectors([] pts

)void TransformVectorsExample(PaintEventArgs e)

{myPen = new Pen(Color.Blue, 1);myPen2 = new Pen(Color.Red, 1);

// Create an array of points.[] myArray =

{Point(20, 20),Point(120, 20),Point(120, 120),Point(20, 120),Point(20,20)

};

// Draw the Points to the screen before applying the

// transform..Graphics.DrawLines(myPen, myArray);

// Create a matrix, scale it, and translate it.myMatrix = new Matrix();.Scale(3, 2, MatrixOrder.Append);.Translate(100, 100, MatrixOrder.Append);

// List the matrix elements to the screen.(e,,

"Scaled and Translated Matrix", 6, 20);

// Apply the transform to the array..TransformVectors(myArray);

// Draw the Points to the screen again after applying the

}

Контрольные вопросы:

Какие преобразования называются аффинными?

Назовите три основных вида аффинных преобразований.

Какие координаты называются однородными координатами точки?

Приведите вид следующих матриц:

Матрица вращения.

Матрица растяжения.

Матрица отражения.

Матрица переноса.

Укажите строки программного кода вашей программы, которые выполняют преобразования:

вращения, переноса, растяжения.

Похожие работы на - 2D преобразования

 

Не нашел материал для своей работы?
Поможем написать качественную работу
Без плагиата!