СРЕДА ПРОГРАММИРОВАНИЯ DELPHI
Лабораторнаяработа№8
Тема: «Графика»
В работе предлагается задание по теме "Графические возможности DELPHI". В конце текста лабораторной работы есть приложение с теорией по указанной теме.
Задание. Графические возможности DELPHI
Для выполнения задания создайте новое приложение.
1. Сконструируйте форму, на которой расположите компоненты Image1 (вкладка Additional), Button1.
2. Решение задачи своего варианта оформите в виде процедуры, которую нужно вызвать в обработчике события OnClick кнопки Button1.
ЗАМЕЧАНИЕ: ЗАДАНИЯ МОЖЕТ СФОРМУЛИРОВАТЬ ВАШ ПРЕПОДАВАТЕЛЬ.
Задачи по вариантам:
№ 1.. На холст объекта Image1 выведите следующий рисунок.
На рисунке точками изображено число родившихся мальчиков и девочек за каждый календарный месяц 2013 года в городском роддоме. По горизонтали указываются месяцы, по вертикали - количество родившихся мальчиков и девочек (по отдельности). Для наглядности точки соединены линиями.
№ 2. На холст объекта Image1 выведите следующий рисунок.
На рисунке показана среднемесячная температура воздуха в Нижнем Новгороде за каждый месяц 1994 года. По горизонтали указываются месяцы, по вертикали - температура в градусах Цельсия.
№ 3. На холст объекта Image1 выведите следующий рисунок (следующие далее текст, формулы и числовые прямые входят в рисунок).
НЕРАВЕНСТВА РЕШЕНИЯ
№ 4. На холст объекта Image1 выведите следующий рисунок.
На рисунке изображена сравнительная диаграмма ежемесячных объёмов продаж телевизоров марок Samsung и Philips в 2012 году в магазине радиоэлектроники. По горизонтали указываются месяцы, по вертикали - количество проданных телевизоров.
№ 5. На холст объекта Image1 выведите следующий рисунок.
На рисунке изображены диаграммы Эйлера, демонстрирующие выполнение операций над множествами.
№ 6. На холст объекта Image1 выведите следующий рисунок.
На рисунке показано обеспечение каждого жителя планеты лесными ресурсами. По горизонтали отмечены страны мира, по вертикали - лесные ресурсы на каждого жителя в гектарах.
№ 7. На холст объекта Image1 выведите следующий рисунок.
На рисунке изображена сравнительная диаграмма ежемесячной рождаемости девочек и мальчиков в городском роддоме в течение 2013 года. По горизонтали указываются месяцы, по вертикали - количество родившихся.
№ 8. На холст объекта Image1 выведите следующий рисунок.
Рисунок демонстрирует решение задачи линейного программирования графическим методом.
№ 9. На холст объекта Image1 выведите следующий рисунок (следующие далее текст, формулы и числовые прямые входят в рисунок).
НЕРАВЕНСТВА РЕШЕНИЯ
№ 10. На холст объекта Image1 выведите следующий рисунок.
№ 11. На холст объекта Image1 выведите следующий рисунок.
На рисунке точками изображено атмосферное давление в городе N на протяжении трёх суток с 4 по 6 апреля 2013 года. в течение суток давление измеряется 4 раза: ночью (00:00), утром (06:00), днём (12:00) и вечером (18:00). По горизонтали указывается время суток и дата, по вертикали - давление в миллиметрах ртутного столба. Для наглядности точки соединены линиями.
№ 12. На холст объекта Image1 выведите следующий рисунок.
Контрольные вопросы.
1. Что такое Canvas? Приведите примеры компонентов, которые обладают этим свойством.
2. Какие свойства Pen и Brush вы знаете?
3. Какие графические примитивы можно вывести с помощью Canvas? Приведите примеры.
4. Как вывести текст на Canvas? Какие изменить свойства выводимого текста?
5. Как закрасить замкнутую область?
ТЕОРИЯ. Графические возможности DELPHI
Холст
Свойство Canvas - абстрактный холст, на котором можно рисовать.
Холст состоит из отдельных точек - пикселей.
Положение пикселя характеризуется его горизонтальной (X) и вертикальной (Y) координатами.
Левый верхний пиксель (0, 0). Координаты возрастают слева направо и сверху вниз.
Размер холста можно получить, обратившись к свойствам Height и Width области иллюстрации (Image) или к свойствам формы: ClientHeight и ClientWidth.
Карандаш
Карандаш (свойство Реn) - для вычерчивания линий и контуров.
Свойства объекта Карандаш:
Color - цвет линии (тип TColor).
Пример: Image1.Canvas.Pen.Color:=clGreen; // Линии зеленого цвета
Width - толщина линии (в пикселях).
Пример: Image1.Canvas.Pen.Width:=2;
Style - вид линии (непрерывная; прерывистая, состоящая из штрихов различной длины).
Пример: Image1.Canvas.Pen.Style:=psSolid; // Непрерывная линия
Замечание: Если значение свойства Pen.Width больше единицы, то пунктирная линия будет выведена как сплошная.
Mode - режим отображения: определяет, как будет формироваться цвет точек линии в зависимости от цвета точек холста, через которые эта линия прочерчивается.
Пример: Image1.Canvas.Pen.Mode:=pmNot;
В примере цвет точки линии определяется как инверсный по отношению к цвету точки холста, в которую выводится точка линии (независимо от цвета фона все участки линии будут видны, даже если цвет линии и цвет фона совпадают).
Кисть
Кисть (свойство Brush) - для закрашивания областей, ограниченных контурами.
Свойства объекта Кисть:
Color - цвет закрашивания замкнутой области (тип TColor).
Пример: Image1.Canvas.Brush.Color:=clWhite; // Закраска белым цветом
Style - стиль (тип) заполнения области (закрашена или заштрихована).
Пример: Image1.Canvas.Brush.Style:=bsHorizontal; // Закраска горизонтальными линиями
Точка
«Нарисовать" точку, т.е. задать требуемый цвет для точки графической поверхности, можно с помощью свойства Pixels.
Свойство Pixels - двумерный массив типа TColor, содержащий информацию о цвете каждой точки графической поверхности.
Пример: Form1.Canvas.Pixels[10,10]:=clRed; // Красная точка в позиции (10,10)
Размер массива Pixels определяется размером графической поверхности.
Pixels[0,0] - левая верхняя точка рабочей области.
Для формы Form:
Pixels[ClientWidth-1,ClientHeight-1] – правая нижняя точка рабочей области.
Для компонента Image:
Pixels[Width - 1,Height - 1] – правая нижняя точка рабочей области.
Прямая линия
Метод MoveTo(x,у) задает начальную точку линии.
Пример: Form1.Canvas.MoveTo(10,20);
Метод LinеТо(x,y) вычерчивает прямую линию от текущей позиции карандаша в точку с координатами, указанными при вызове метода.
Пример: Form1.Canvas.LinеTo(100,130);
Вид линии (цвет, толщина и стиль) определяется значениями свойств объекта Реn графической поверхности, на которой вычерчивается линия.
Ломаная линия
Метод Polyline вычерчивает ломаную линию.
Параметр метода - массив типа TPoint, каждый элемент которого – запись с полями х и у (координаты точек перегиба ломаной).
Пример: выводится график изменения некоторой величины
Var gr: array[1..50] of TPoint; // график - ломаная линия
..........
begin
..........
with Form1.Canvas do
begin
MoveTo(x0,y0); LineTo(x0,10); // ось Y
MoveTo(x0,y0); LineTo(200,y0); // ось X
Polyline(gr); // график
end;
..........
end;
Прямоугольник
Метод Rectangle(x1, y1,x2, y2) вычерчивает прямоугольник.
x1, y1 и х2, у2 - координаты левого верхнего и правого нижнего углов прямоугольника.
Пример: Form1.Canvas.Rectangle(30,50,100,200);
Метод RoundRec(x1,y1,х2, у2, х3, у3) вычерчивает прямоугольник со скругленными углами.
x1, y1, х2, у2 - параметры, определяющие положение углов прямоугольника, в который вписывается прямоугольник со скругленными углами;
х3 и у3 - размер эллипса, одна четверть которого используется для вычерчивания скругленного угла.
Методы, которые вычерчивают прямоугольник, используя в качестве инструмента только кисть (Brush):
Метод FillRect - закрашенный прямоугольник
Метод FrameRect - контурный прямоугольник.
У каждого из этих методов один параметр типа TRect, который содержит координаты прямоугольной области. Заполняется при помощи функции Rect.
Пример:
Var r1, r2: TRect; // координаты углов прямоугольников
begin
// заполнение полей структуры
r1:= Rect(20,20,60,40); r2:= Rect(10,10,40,50);
with Fоrm1.Canvas do
begin
Brush.Color:= clRed; FillRect(r1); // закрашенный прямоугольник
Brush.Color:= clGreen; FrameRect(r2); // только граница прямоугольника
end;
end;
Многоугольник
Метод Polygon вычерчивает многоугольник.
Параметр - массив типа TPoint (каждый элемент – запись с полями х,у, координатами вершины многоугольника)
Пример: вычерчивание треугольника
Var pol: array[1..3] of TPoint; // координаты точек треугольника
begin
pol[1].x:= 10; pol[1].y:= 50;
pol[2].x:= 40; pol[2].y:= 10;
pol[3].х:= 70; pol[3].у:= 50;
Form1.Canvas.Polygon(pol);
end;
Окружность и эллипс
Метод Ellipse(x1,y1,х2,у2) вычерчивает эллипс или окружность, в зависимости от значений параметров.
x1, y1, х2, у2 - координаты прямоугольника, внутри которого вычерчивается эллипс или, если прямоугольник является квадратом, окружность.
10. Дуга
Метод Arc(x1,y1,х2,у2,х3,у3,х4,у4) вычерчивает дугу.
x1, y1, х2, у2 - определяют эллипс (окружность), частью которого является дуга;
х3, у3 - параметры, определяющие начальную точку дуги;
х4, у4 - параметры, определяющие конечную точку дуги.
Начальная (конечная) точка - это точка пересечения границы эллипса и прямой, проведенной из центра эллипса в точку с координатами х3 и у3 (х4, у4).
Дуга вычерчивается против часовой стрелки от начальной точки к конечной.
Сектор
Метод Pie(x1,y1,x2,y2,х3,у3,х4,у4) вычерчивает сектор эллипса или круга.
x1, y1, х2, у2 - определяют эллипс (окружность), частью которого является сектор;
х3, у3, х4, у4 - определяют координаты конечных точек прямых, являющихся границами сектора.
Начальные точки прямых совпадают с центром эллипса (окружности).
Сектор вырезается против часовой стрелки от прямой, заданной точкой с координатами (хЗ, у3), к прямой, заданной точкой с координатами (х4, у4).
Закраска области
Метод FloodFill (x, y, Color, FillStyle) заполняет данную область (регион), начиная с точки (x,y) до тех пор, пока не будет достигнут край.