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

Создание приложения на языке C Windows Form. Характеристика особенностей интерфейса GDI+. Композиция преобразований. Матрица A, поворот на 90 градусов. Матрица B, масштабирование по оси X с коэффициентом 2. Матрица C, сдвиг на три единицы по оси Y.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 12.06.2015
Размер файла 88,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

Задание

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

Рис. 1

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

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

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

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

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

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

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

using 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

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

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();

myMatrix.Rotate(30);

myMatrix.Scale(1, 2, MatrixOrder.Append);

myMatrix.Translate(5, 0, MatrixOrder.Append);

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

Имя Описание

Matrix() Инициализирует новый экземпляр класса Matrix в виде единичной матрицы.

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

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

Matrix(Single, Single, Single, Single, Single, Single) Инициализирует новый экземпляр класса Matrix с указанными элементами.

Методы

Имя Описание

Clone Создает точную копию этого объекта Matrix.

CreateObjRef Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject.)

Dispose Освобождает все ресурсы, используемые данным объектом Matrix.

Equals Проверяет, является ли заданный объект объектом Matrix и идентичен ли он этому объекту Matrix. (Переопределяет Object.Equals(Object).)

Finalize Позволяет объекту Object попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект Object будет утилизирован в процессе сборки мусора. (Унаследовано от Object.)

GetHashCode Возвращает хэш-код. (Переопределяет Object.GetHashCode().)

GetLifetimeService Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.)

GetType Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)

InitializeLifetimeService Возвращает объект обслуживания во время существования для управления политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.)

Invert Обращает матрицу Matrix, если она обратима.

MemberwiseClone Создает неполную копию текущего объекта Object. (Унаследовано от Object.)

MemberwiseClone(Boolean) Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject.)

Multiply(Matrix) Умножает эту матрицу Matrix на матрицу, указанную в параметре matrix, путем добавления указанной матрицы Matrix.

Multiply(Matrix, MatrixOrder) Умножает этот объект Matrix на матрицу, указанную в параметре matrix, в порядке, задаваемом в параметре order.

Reset Сбрасывает этот объект Matrix, чтобы получить элементы единичной матрицы.

Rotate(Single) Добавляет в этот объект Matrix поворот по часовой стрелке вокруг начала координат на указанный угол.

Rotate(Single, MatrixOrder) Применяет поворот по часовой стрелке вокруг начала координат (нулевые координаты x и y) на величину, указанную в параметре angle, к этому объекту Matrix.

RotateAt(Single, PointF) Применяет поворот по часовой стрелке к этому объектуMatrix; поворот производится вокруг точки, указанной в параметре point, и путем добавления поворота в начало.

RotateAt(Single, PointF, MatrixOrder) Применяет поворот по часовой стрелке вокруг указанной точки к объекту Matrix в указанном порядке.

Scale(Single, Single) Применяет указанный вектор масштабирования к этому объекту Matrix, добавляя вектор масштабирования в начало.

Scale(Single, Single, MatrixOrder) Применяет указанный вектор масштабирования (scaleX и scaleY) к этому объекту Matrix в указанном порядке.

Shear(Single, Single) Применяет указанный вектор сдвига к этому объекту Matrix, добавляя преобразование сдвига в начало.

Shear(Single, Single, MatrixOrder) Применяет указанный вектор сдвига к этому объекту Matrix в указанном порядке.

ToString Возвращает объект String, который представляет текущий объект Object. (Унаследовано от Object.)

TransformPoints(Point[]) Применяет геометрическое преобразование, представляемое этим объектом Matrix, к указанному массиву точек.

TransformPoints(PointF[]) Применяет геометрическое преобразование, представляемое этим объектом Matrix, к указанному массиву точек.

TransformVectors(Point[]) Применяет только компоненты масштабирования и поворота этого объекта Matrix к указанному массиву точек.

TransformVectors(PointF[]) Умножает каждый вектор массива на матрицу. Элементы смещения данной матрицы (третья строка) игнорируются.

Translate(Single, Single) Применяет указанный вектор смещения (offsetX и offsetY) к этому объекту Matrix, добавляя вектор смещения в начало.

Translate(Single, Single, MatrixOrder) Применяет указанный вектор ссмещения к этому объекту Matrix в указанном порядке.

VectorTransformPoints Умножает каждый вектор массива на матрицу. Элементы смещения данной матрицы (третья строка) игнорируются.

Свойства

Имя Описание

Elements Получает массив значений с плавающей запятой, представляющий элементы этого объекта Matrix.

IsIdentity Получает значение, определяющее, является ли объект Matrix единичной матрицей.

IsInvertible Возвращает значение, указывающее, является ли матрица Matrix обратимой.

OffsetX Получает значение смещения по оси x (значение dx, или элемент на пересечении третьей строки и первого столбца) объекта Matrix.

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

Пример:

Следующий пример кода предназначен для использования совместно с Windows Forms; для него необходим объект PaintEventArgse и обработчик события Paint. Этот код выполняет следующие действия:

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

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

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

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

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

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

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

public void TransformVectors(

Point[] pts

)

public void TransformVectorsExample(PaintEventArgs e)

{

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

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

// Create an array of points.

Point[] myArray =

{

new Point(20, 20),

new Point(120, 20),

new Point(120, 120),

new Point(20, 120),

new Point(20,20)

};

// Draw the Points to the screen before applying the

// transform.

e.Graphics.DrawLines(myPen, myArray);

// Create a matrix, scale it, and translate it.

Matrix myMatrix = new Matrix();

myMatrix.Scale(3, 2, MatrixOrder.Append);

myMatrix.Translate(100, 100, MatrixOrder.Append);

// List the matrix elements to the screen.

ListMatrixElements(e,

myMatrix,

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

// Apply the transform to the array.

myMatrix.TransformVectors(myArray);

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

// transform.

e.Graphics.DrawLines(myPen2, myArray);

}

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

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

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

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

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

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

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

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

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

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

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

Размещено на Allbest.ru


Подобные документы

  • Ортонормированная матрица – матрица, столбцы и строки которой образуют системы ортонормированных векторов. Решения задачи для матрицы, которая является и не является ортонормированной. Разработка структур данных и алгоритмов. Код программы на языке С++.

    курсовая работа [429,1 K], добавлен 09.03.2012

  • Этапы реализации класса "вещественная матрица", позволяющего осуществлять основные операции с вещественными прямоугольными и транспонированными матрицами. Листинг программы, которая реализует тип данных "вещественная матрица" и принципы работы с ними.

    лабораторная работа [85,6 K], добавлен 07.05.2011

  • Разработка программы для работы в операционных системах семейства Windows. Использование среды Delphi - современной технологии визуального проектирования. Создание пользовательского интерфейса, оконного приложения, меню; задание исходной матрицы.

    курсовая работа [1,5 M], добавлен 12.01.2011

  • Разработка компоненты для математических вычислений (операций над матрицами) с использованием технологии OpenGL (сложение, вычитание, умножение, транспонирование, определитель, обратная матрица). Базовые навыки по работе с технологией в среде .Net.

    курсовая работа [365,6 K], добавлен 17.02.2015

  • Создание приложения по выбору варианта заполнения прямоугольной матрицы: случайными числами или из текстового файла. Идентификаторы метода "main". Расчет количества столбцов, содержащих хотя бы один нулевой элемент. Инструкция по работе с программой.

    курсовая работа [563,8 K], добавлен 28.10.2014

  • Вектор и матрица с числовыми компонентами как математические прообразы массивов. Создание программы, содержащей процедуры для выполнения заданных операций: построение массива, перестановка строк и столбцов. Использование диалоговых окон "уведомлений".

    курсовая работа [1,3 M], добавлен 15.02.2011

  • Модели вычислительных процессов, оценка трудоемкости алгоритма методами теории марковских цепей. Модели мультиплексного и селекторного каналов. Экспоненциальные стохастические сети и их параметры. Матрица вероятностей передач, элементы автоматики.

    курсовая работа [673,7 K], добавлен 08.11.2012

  • Характеристика торгового предприятия. Анализ существующего программного обеспечения. Современные подходы к управлению запасами. Матрица АВС-XYZ и ее использование при принятии решений при управлении запасами. Разработка необходимого программного продукта.

    курсовая работа [1,2 M], добавлен 20.03.2012

  • Понятие и функциональные особенности референтной модели. Организационная структура предприятия. Дерево бизнес-процессов. Модель бизнес-процесса "Обслуживание клиентов": модель в IDF0, IDF3 и DFD. Матрица ответственности и регламент исследуемого процесса.

    курсовая работа [556,0 K], добавлен 20.12.2013

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

    курсовая работа [98,9 K], добавлен 28.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.