Файл: Актуальность На сегодняшний день графика имеет не маловажное значение для языков программирования Она разрешает визуализировать все возможные программы, что придаёт яркость и удобство использования Так как живём в трехмерном мире,.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 103

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Кроме того, анимацию всех спрайтов можно выключить/включить вызовом следующих процедур:

procedure StartSprites;
Стартует анимацию всех спрайтов

procedure StopSprites;
Останавливает анимацию всех спрайтов


Для работы с рисунками используется класс Picture, позволяющий рисовать на себе те же графические примитивы, что и на экране

Режим блокировки рисования на экране (LockDrawing) позволяет осуществлять прорисовку лишь во внеэкранном буфере, после чего с помощью метода Redraw восстанавливать все графическое окно Данный метод используется для ускорения анимации и создания анимации без мерцания

Модули Timers и Sounds позволяют создавать таймеры и звуки, которые также реализованы в процедурном стиле Эти модули можно использовать даже в консольных программах

Основные понятия графики

Экраны цветных мониторов состоят из прямоугольной решётки точек(пикселей),светящихся разным цветом Каждый цветной пиксель образован тремя более мелкими по площади участками красного, зелёного и синего цветов При свечении этих участков с разной интенсивностью цвета смешиваются, создавая элементы изображения различных оттенков и яркости Важной характеристикой растра является его расширение Расширение экрана-это количество точек(пикселей) на единицу длины Чем это число выше, тем более мелкими являются сами пиксели, и, соответственно, более плотно они располагаются на плоскости, что и приводит к тому, что воспринимаем их как единое, цельное изображение Из года в год разрешающая способность принтеров, мониторов, сканеров и тп растёт Для использования графических возможностей языка Паскаль необходимо в блоке описания uses подключить графический модуль Graph Модуль содержит набор графических функций и процедур, основные из них которые рассмотрены ниже Положение каждой точки изображения задано координатами Х и У Координаты- целые числа, они задают номера колонки и строки и не зависят от физического размера экрана Оси координат направлены следующим образом: горизонтальная ось Х направлена слева направо; вертикальная ось У направлена сверху вниз; верхний левый угол имеет координаты(0, 0)


Рис1 Ось координат
Очевидно, что запись изображения требует хранения информации о положении множества точек, для каждой из которых должен быть задан цвет Цветное изображение получается смешиванием трех основных цветов - красного, зеленого и синего Такая модель представления цвета называется моделью RGB ( Red - Green - Blue ) Управляя интенсивностью компонентов, можно получить различные оттенки и степени интенсивности цвета В частности, для получения градаций серого надо взять интенсивности трех основных цветов равными друг другу Стандартный модуль GraphABC системы PascalABCNet содержит типы, константы, переменные, процедуры и функции, позволяющие создавать изображения в специально графическом окне


§2 Основные функции и процедуры работы с графикой в PascalABCNet

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

  1. SetPixel(x,y,color) - Закрашивает один пиксел с координатами (x,y) цветом color LineTo(x,y) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y)

  2. Line(x1,y1,x2,y2) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2)

  3. SetPenColor(color) - устанавливает цвет пера, задаваемый параметром color SetPenWidth(n) - устанавливает ширину (толщину) пера, равную n пикселям Rectangle(x1,y1,x2,y2) - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2)

  4. FloodFill(x,y,color) - заливает область одного цвета цветом color, начиная с точки (x,y)

  5. SetBrushColor(color) - устанавливает цвет кисти Заливка кистью распространяется на замкнутый контур, описание которого следует за процедурой установки цвета кисти

  6. Ellipse(x1,y1,x2,y2) - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2) Circle(x,y,r) - рисует окружность с центром в точке (x,y) и радиусом r

  7. Arc(x,y,r,a1,a2) - Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 - вещественные, задаются в градусах и отсчитываются против часовой стрелки)


Таблица1 Цветовая гамма Pascal ABCNet

clBlack

черный

clWhite

белый

clRed

красный

clGreen

зеленый

clBlue

синий

clYellow

желтый

clAqua

бирюзовый

clFuchsia

сиреневый

clGray

темно-серый

clMoneyGreen

цвет зеленых денег

clDkGray

темно-серый

clSilver

серебряный

clPurple

фиолетовый

clMaroon

темно-красный

clNavy

темно-синий

clBrown

коричневый

clSkyBlue

голубой

clCream

кремовый

clOlive

оливковый

clTeal

сине-зеленый

clLime

ярко-зеленый

clLtGray

светло-серый

clMedGray

серый













Графические примитивы


procedure Arc(x, y, r, angle1, angle2: real; c: Color);
Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c

procedure Circle(x,y,r: real; c: Color);
Рисует окружность с центром в точке (x,y), радиусом r и цветом c

procedure DrawCircle(x,y,r: real; c: Color);
Рисует контур окружности с центром в точке (x,y), радиусом r и цветом c

procedure DrawCircle(p: Point; r: real; c: Color);
Рисует контур окружности с центром в точке p, радиусом r и цветом c

procedure DrawEllipse(x,y,rx,ry: real; c: Color);
Рисует контур эллипса с центром в точке (x,y), радиусами rx и ry и цветом c

procedure DrawPixels(x,y: real; pixels: array [,] of Color; px,py,pw,ph: integer); Рисует прямоугольную область (px,py,pw,ph) двумерного массива пикселей pixels начиная с левого верхнего угла с координатами (x,y)

procedure DrawPolygon(points: array of Point; c: GColor);
Рисует контур многоугольника, заданного массивом точек и цветом

procedure DrawRectangle(x,y,w,h: real; c: Color);
Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c

procedure DrawSector(x, y, r, angle1, angle2: real; c: Color);
Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c

procedure Ellipse(p: Point; rx,ry: real; c: Color);
Рисует эллипс с центром в точке p, радиусами rx и ry и цветом внутренности c

procedure FillCircle(x,y,r: real; c: Color);
Рисует внутренность окружности с центром в точке (x,y), радиусом r и цветом c

procedure FillEllipse(x,y,rx,ry: real; c: Color);
Рисует внутренность эллипса с центром в точке (x,y), радиусами rx и ry и цветом c

procedure FillEllipse(p: Point; rx,ry: real; c: Color);
Рисует внутренность эллипса с центром в точке p, радиусами rx и ry и цветом c

procedure FillRectangle(x,y,w,h: real; c: Color);
Рисует внутренность прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c

procedure FillSector(x, y, r, angle1, angle2: real; c: Color);
Рисует внутренность сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c

procedure Line(x,y,x1,y1: real; c: Color);
Рисует отрезок прямой от точки (x,y) до точки (x1,y1) цветом c

procedure LineOn(dx,dy: real);
Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy) Текущая позиция переносится в новую точку

procedure Lines(a: array of (Point,Point); c: Color);

Рисует отрезки, заданные массивом пар точек, цветом c

procedure MoveOn(dx,dy: real);
Перемещает текущую позицию рисования на вектор (dx,dy)

procedure MoveRel(dx,dy: real);
Перемещает текущую позицию рисования на вектор (dx,dy)

procedure MoveTo(x,y: real);
Устанавливает текущую позицию рисования в точку (x,y)

procedure Pie(x, y, r, angle1, angle2: real);
Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX

procedure PolyLine(points: array of Point; c: Color);
Рисует ломаную заданную массивом точек и цветом

procedure Rectangle(x,y,w,h: real; c: Color);
Рисует прямоугольник с координатами вершин (x,y) и (x+w,y+h) цветом c

procedure Sector(x, y, r, angle1, angle2: real; c: Color);

Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c

procedure SetPixel(x,y: real; c: Color);

Рисует пиксел в точке (x,y) цветом c

procedure SetPixels(x,y: real; w,h: integer; f: (integer,integer)->Color);

Рисует прямоугольник пикселей размера (w,h), задаваемых отображением f, начиная с левого верхнего угла с координатами (x,y)


Подпрограммы для работы с пером


Рисование линий осуществляется текущим пером Доступ к свойствам текущего пера можно осуществлять как в процедурном, так и в объектно-ориентированном стиле

Процедуры и функции для доступа к свойствам пера сгруппированы парами: если Prop - имя свойства пера, то функция PenProp возвращает значение этого свойства, а процедура SetPenProp(p) устанавливает это свойство: procedure SetPenColor(c: Color);
Устанавливает цвет текущего пера

function PenColor: Color;
Возвращает цвет текущего пера

procedure SetPenWidth(Width: integer);
Устанавливает ширину текущего пера

function PenWidth: integer;
Возвращает ширину текущего пера

procedure SetPenStyle(style: DashStyle);
Устанавливает стиль текущего пера Константы стилей пера приведены здесь

function PenStyle: DashStyle;
Возвращает стиль текущего пера Константы стилей пера приведены здесь

procedure SetPenMode(m: integer);
Устанавливает режим текущего пера

function PenMode: integer;
Возвращает режим текущего пера

function PenX: integer;
Возвращают x-координату текущей позиции рисования

function PenY: integer;
Возвращают y-координату текущей позиции рисования

Кроме этого, можно изменять свойства текущего пера через объект Pen

Класс Picture графического рисунка


Класс Picture представляет собой графический рисунок модуля GraphABC и является надстройкой над типом SystemDrawingBitmap Он имеет свойство прозрачности, которое можно включать/выключать, а также возможность непосредственного рисования на себе всех графических примитивов

Конструкторы класса Picture

constructor Create(w,h: integer);
Создает рисунок размера w на h пикселей

property Width: integer;
Ширина рисунка в пикселах

property Height: integer;
Высота рисунка в пикселах

property Transparent: boolean;
Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor

Методы класса Picture

procedure Load(fname: string);
Загружает рисунок из файла с именем fname

procedure Save(fname: string);
Сохраняет рисунок в файл с именем fname

procedure SetSize(w,h: integer);
Устанавливает размер рисунка w на h пикселей

function Intersect(p: Picture): boolean;
Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае Для проверки пересечения оба объекта рисуются на белом фоне, и прямоугольник пересечения попиксельно проверяется на пересечение К сожалению, при таком алгоритме любые белые пиксели считаются не принадлежащими объекту Поэтому для корректной работы этого метода не следует использовать белый цвет для внутренности объекта

procedure Draw(x,y: integer; r: SystemDrawingRectangle); // r - part of Picture
Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y)

procedure Draw(x,y: integer; r: SystemDrawingRectangle; g: Graphics);
Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g

procedure FlipHorizontal;
Зеркально отображает рисунок относительно горизонтальной оси симметрии

procedure FlipVertical;
Зеркально отображает рисунок относительно вертикальной оси симметрии

procedure SetPixel(x,y: integer; c: Color);
Закрашивает пиксел (x,y) рисунка цветом c

function GetPixel(x,y: integer): Color;
Возвращает цвет пиксела (x,y) рисунка

procedure Line(x1,y1,x2,y2: integer);
Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2)

procedure FillCircle(x,y,r: integer);
Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r

procedure DrawEllipse(x1,y1,x2,y2: integer);
Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2)

procedure FillRect(x1,y1,x2,y2: integer);
Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2)

procedure DrawRectangle(x1,y1,x2,y2: integer);
Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2)

procedure Rectangle(x1,y1,x2,y2: integer);
Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2)

procedure RoundRect(x1,y1,x2,y2,w,h: integer);
Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев

procedure Arc(x,y,r,a1,a2: integer);
Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)

procedure FillPie(x,y,r,a1,a2: integer);
Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)

procedure Pie(x,y,r,a1,a2: integer);
Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)

procedure Polygon(points: array of Point);
Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points

procedure Polyline(points: array of Point);
Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points




procedure TextOut(x,y: integer; s: string);
Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y)

procedure FloodFill(x,y: integer; c: Color);
Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y)

procedure Clear;
Очищает рисунок белым цветом