- •Московский государственный технический университет
- •Содержание.
- •Предисловие
- •Лабораторная работа №1 Процедурные типы
- •1. Теоретические сведения
- •Var X: real; I: integer;
- •X, y : byte;
- •VarFunc : FuncType;
- •I : integer;
- •2.Задачи для самостоятельного решения
- •Лабораторная работа №2 Модули
- •Теоретическая часть
- •Структура модулей
- •Связь модулей друг с другом
- •ISwap(a,b);
- •Var I, y :integer;
- •2.2. Практическая часть
- •Interface
- •Implementation
- •I: Integer;
- •3. Задачи, для самостоятельного решения
- •Лабораторная работа №3 Меню
- •1. Теоретическая часть
- •Var X,y,I: byte;
- •XUpLeft;
- •Var npos,I: integer;
- •Case npos of
- •Лабораторная работа №4.
- •2.Задачи, для самостоятельного решения:
- •Лабораторная работа № 5 Указатели. Связанные списки
- •1. Теоретические сведения
- •1.1. Указатели
- •1.2. Связные списки записей
- •1.3. Управление связанным списком записей (на примере)
- •1.3.1. Построение списка
- •Var ListOfChecks, CurrentCheck: pCheck;
- •1.3.2. Перемещение по списку
- •Var p: Pint;
- •2. Демонстрационные примеры
- •X1,y1,x2,y2: word;
- •Var npos,I,n,j :integer;
- •3: Begin
- •Interface
- •Задачи 1..4. Создать типизированный файл записей, содержащих сведения о багаже пассажира. Структура записи имеет следующий вид:
- •Var rec, beg, endd, current: pnt;
- •Задача 5. Создать типизированный файл записей, содержащих сведения об автомобиле. Структура записи имеет следующий вид:
- •Var rec, beg, endd, current : pnt;
- •Задача 22. Создать типизированный файл записей, содержащих сведения о книгах. Структура записи имеет следующий вид:
- •1.2.Объект и инкапсуляция
- •1.3. Иерархия объектов и наследование
- •Visible: Boolean;
- •Init(x1,y1);
- •Interface
- •Interface
- •X,y : Integer;
- •Visible : Boolean;
- •Implementation
- •Var Temp : Word;
- •Var Temp : Word;
- •Var gm,gd:Integer;
- •Xp:Point;
- •Xs:Square;
- •Xps:PaintSquare;
- •InitGraph(Gd,Gm,'');
- •2. Демонстрационные примеры
- •X,y:integer;
- •Inherited init(ax,ay);
- •Задача 12. Простые объекты.
- •Задача 14. Простые объекты.
- •Задача 15. Простые объекты.
- •Задача 20. Простые объекты.
- •Задача 21. Простые объекты.
- •Задача 22. Простые объекты.
- •Задача 23. Простые объекты.
- •Задача 25. Простые объекты.
- •Лабораторная работа №8 Статические объекты
- •Теоретическая часть
- •1.1.Вывод точек и линий
- •1.2.Вывод многоугольников
- •Виды закраски определяется константами.
- •1.3.Вывод дуг, окружностей, эллипсов
- •1.4.Вывод текста
- •Демонстрационные примеры
- •Лабораторная работа №9
- •2. Задачи, для самостоятельного решения
- •Лабораторная работа №10
- •1.2. Перенос изображения
- •1.3. Масштабирование изображения
- •1.4. Масштабирование рисунка
- •1.5. Поворот изображения
- •1.5.1.Поворот точки
- •1.5.2. Поворот рисунка
- •1.6. Композиция преобразований
- •2. Демонстрационные примеры
- •X,y:integer;
- •1: CloseGraph;
- •3.Задачи, для самостоятельного решения
- •Лабораторная работа №12 Рубежный контроль №2
- •Задачи, для самостоятельного решения
Лабораторная работа №10
Масштабирование, поворот, управление объектами
Цель работы – овладение практическими приемами разработки программ, приобрести навыки в управлении режимами отображения объектов в графическом режиме.
Теоретическая часть
1.1. Преобразование изображений: перенос,
масштабирование, поворот, комбинированные преобразования
При построении изображений часто приходится иметь дело с ситуациями, когда общее изображение (рисунок) включает в себя целый ряд компонент (подрисунков), отличающихся друг от друга только местоположением, ориентацией, масштабом, т.е. отдельные подрисунки обладают значительным геометрическим сходством.
В этом случае целесообразно описать один подрисунок в качестве базового, а затем получать остальные требуемые подрисунки путем использования операций преобразования.
С помощью операций преобразования можно выполнять следующие действия:
1) перемещать рисунки из одного места экрана в другое;
создавать рисунок из более мелких элементов (составных частей);
добавлять к существующему рисунку новые элементы;
увеличивать размер рисунка для улучшения его наглядности или отображения более мелких деталей;
уменьшать размер рисунка для внесения, например, поясняющих надписей или отображения на экране новых рисунков;
создавать движущиеся изображения.
Все изменения рисунков можно выполнить с помощью трех базовых операций:
1) переноса (перемещения) изображения;
2) масштабирования (увеличения или уменьшения размеров) изображения;
3) поворота изображения (употребляют также термины вращение, изменение ориентации).
Для реализации перечисленных операций используется аппарат линейных преобразований.
Линейное преобразование на плоскости - это такое отображение плоскости в себя, при котором прямая переходит в прямую. Произвольная точка с координатами (X,Y) переходит в результате линейного преобразования в точку с координатами (X1,Y1) в соответствии с выражениями:
X1 = A*X + B*Y + C
Y1 = D*X + E*Y + F, (1)
где A,B,C,D,E,F - коэффициенты данного преобразования, однозначно его определяющие.
Последовательное применение двух линейных преобразований можно заменить одним третьим, эквивалентным, которое называется их произведением.
Формулы линейного преобразования (1) можно записать в матричной форме:
¦ A D 0¦
(X1,Y1,1) = (X,Y,1) * ¦B E 0 ¦ = (X,Y,1) * M, (2)
¦ C F 1 ¦
где M матрица преобразования.
Здесь используются однородные координаты, которые были введены в геометрии и ныне широко используются в машинной графике. В однородных координатах точка P(X,Y) записывается в виде P(W*X,W*Y,W) для любого масштабного множителя W<>0. При этом, если для точки задано ее представление в однородных координатах P(X,Y,W), то можно найти ее двумерные декартовы координаты как x=X/W, y=Y/W. Для двумерного пространства W=1, поэтому операция деления не требуется. Однородные координаты можно представить как вложение промасштабированное с коэффициентом W двумерной плоскости в плоскость z=W (здесь z=1) в трехмерном пространстве.
Следует добавить, что с помощью матрицы преобразования
¦ A B ¦
(X1,Y1)=(X,Y)*¦ C D ¦ , - нельзя описать операцию переноса.
Для двух последовательно выполняемых линейных преобразований можно записать следующее выражение:
(X2,Y2,1) = (X1,Y1,1)*M2 = (X,Y,1)*M1*M2 = (X,Y,1)*M (3)
где X,Y - координаты исходной точки;
X1,Y1 - координаты точки после первого преобразования;
X2,Y2 - координаты точки после второго преобразования;
M1,M2,M - матрицы соответственно первого, второго и результирующего преобразований.
Поскольку в общем случае операция умножения матриц не является коммутативной, то в общем случае и два последовательных линейных преобразования некоммутативные.
Если определитель матрицы преобразования отличен от нуля, то такое преобразование будет являться аффинным. При аффинном преобразовании плоскость не может вырождаться в линию или точку, параллельные прямые переводятся в параллельные и всегда имеется обратное преобразование.
Аффинное преобразование может быть представлено суперпозицией трех преобразований: переноса, масштабирования, поворота.