Главная страница

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


Скачать 0.97 Mb.
НазваниеАктуальность На сегодняшний день графика имеет не маловажное значение для языков программирования Она разрешает визуализировать все возможные программы, что придаёт яркость и удобство использования Так как живём в трехмерном мире,
Дата25.05.2023
Размер0.97 Mb.
Формат файлаdocx
Имя файлакурсач.docx
ТипКурсовая
#1158426

Содержание
Введение

§1Понятие модулей и принципы их использования

§2Описание алгоритма работы программы

§3Работа с графическим модулем средствами Pascal ABCNet

Заключение

Список литературы

Приложение

Введение

Актуальность На сегодняшний день графика имеет не маловажное значение для языков программирования Она разрешает визуализировать все возможные программы, что придаёт яркость и удобство использования Так как живём в трехмерном мире, то создание графических приложений в языках программирования не в состоянии оставить данную тему в стороне
Целью курсовой работы является использования графического модуля в среде программировании PascalАВСNet

Для достижения поставленной цели решить ряд задач


  1. Изучить основные понятия графики, функции и процедуры работы графикой PascalАВС




  1. Освоить навыки создания графических изоброжений в среде программировании PascalАВСNet




  1. Разработать работу с графическим модулем средствами PascalАВСNet


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

В первом параграфе описывается понятие модулей и принципы их использования


Во втором параграфе описывается основные функции и процедуры работы с графикой в PascalABCNet



В третьем параграфе описывается работа с графическим модулем средствами Pascal ABCNet


§1 Понятие модулей и принципы их использования

Система PascalABCNet основана на языке Object Pascal и призвана осуществить постепенный переход от простейших программ к модульному, объектно-ориентированному, событийному и компонентному программированию Некоторые языковые конструкции в PascalABCNet допускают, наряду с основным, упрощенное использование, что позволяет использовать их на ранних этапах обучения Например, в модулях может отсутствовать разделение на секцию интерфейса и секцию реализации В этом случае модули устроены практически так же, как и основная программа, что позволяет приступить к их изучению параллельно с темой "Процедуры и функции" Тела методов можно определять непосредственно внутри классов (в стиле Java и C#), что позволяет создавать классы практически сразу после изучения записей, процедур и функций

Ряд модулей системы программирования PascalABCNet специально создавался для учебных целей:

Модуль PABCSystem называется системным и автоматически подключается первым к любой программе или модулю Он содержит ряд процедур, функций, констант, типов, методов расширения, перегруженных операций

Раздел uses состоит из нескольких подряд идущих секций uses, каждая из кoтopыx имеет вид:

uses список имен;

Имена в списке перечисляются через запятую и могут быть либо именами подключаемых внешних модулей PascalABCNET, либо пространствами имен NET Например:

uses System, SystemCollectionsGeneric, MyUnit;

Здесь MyUnit - модуль PascalABCNET, представленный в виде исходного текста или откомпилированного pcu-модуля, System и SystemCollectionsGeneric - пространства имен NET

В модуле или основной программе, которая содержит раздел uses, можно использовать все имена из подключаемых модулей PascalABCNET и пространств имен NET Основное отличие между модулями и пространствами имен NET состоит в том, что модуль содержит код, а пространства имен NET содержат лишь имена - для использования кода его необходимо подключить с помощью директивы компилятора {$reference ИмяСборки}, где ИмяСборки - имя dll-файла, содержащего NET-код Другое не менее важное отличие состоит в том, что в модуле или основной программе нельзя использовать имена, определенные в другом модуле, без подключения этого модуля в разделе uses Напротив, если сборка NET подключена директивой $reference, то можно использовать ее имена, явно уточняя их пространством имен, не подключая это пространство имен в разделе uses Например:

begin
SystemConsoleWriteLine('Pascal.ABCNET');
end

По умолчанию в первой секции uses неявно первым подключается системный модуль PABCSystem, содержащий стандартные константы, типы, процедуры и функции Даже если раздел uses отсутствует, модуль PABCSystem подключается неявно Кроме того, по умолчанию с помощью неявной директивы $reference подключаются сборки Systemdll, SystemCoredll и mscorlibdll, содержащие основные NET-типы

Поиск глобальных имен осуществляется вначале в текущем модуле или основной программе, затем во всех подключенных модулях и пространствах имен, начиная с самого правого в секции uses и заканчивая самым левым При этом считается, что пространство имен более правого модуля вложено в пространство имен более левого Таким образом, конфликта имен не происходит Если необходимо использовать имя из конкретного модуля или пространства имен, следует использовать запись

ИмяМодуляИмя

или

ИмяПространстваИменNETИмя

В качестве имени модуля может выступать также имя основной программы если у нее присутствует заголовок program

Библиотеки dll


Библиотеки dll (dynamically linked libraries):

  • содержат группу взаимосвязанных подпрограмм

  • находятся в откомпилированном файле

  • предназначены для обращения к ним из различных программ

Они находятся в файле с расширением dll либо в текущем каталоге приложения (локальные), либо в системном каталоге (глобальные библиотеки) Глобальными библиотеками могут пользоваться одновременно несколько приложений

По своему назначению библиотеки очень похожи на модули, однако, имеют ряд важных отличий

Отличия библиотек от модулей


  1. При создании из модулей исполняемого файла exe программа-линковщик помещает в него только те подпрограммы, переменные, типы и константы, которые используются (вызываются) в основной программе При компиляции же библиотеки в нее добавляются все подпрограммы, потому что неизвестно, какие подпрограммы потребуются конкретному приложению

  2. Библиотеки dll при выполнении программы полностью загружаются в оперативную память

  3. Библиотеки dll часто используются одновременно несколькими программами

  4. Библиотека dll может быть написана и откомпилирована на одном языке, а обращаться к ней можно из программ, написанных на других языках Например, программа на PascalABCNET может вызывать функцию из библиотеки, созданной на языке C# и наоборот Таким образом, библиотеки обеспечивают межъязыковое взаимодействие

Структура библиотеки


Библиотека имеет практически ту же структуру, что и модуль:

library имя библиотеки;

interface

раздел интерфейса

implementation

раздел реализации

end

Имя библиотеки должно совпадать с именем pas-файла, в котором библиотека находится

Имеется также упрощенный синтаксис библиотек - без разделов интерфейса и реализации, совпадающий с упрощенным синтаксисом модулей (за исключением заголовка)

В результате компиляции библиотеки в текущем каталоге создаётся dll-файл, содержащий откомпилированную библиотеку

Подключение библиотеки к основной программе


Для подключения библиотеки к основной программе используется директива компилятора {$reference ИмяБиблиотеки} Например:

{$reference.ABCdll}
{$reference.ABC1dll}

begin
writeln(aGetType);
end

Подключение библиотеки может проводиться в любом месте исходного файла

Библиотеки ABC и ABC1 имеют соответственно вид:

library ABC;

var a: integer;

end

и

library ABC1;

var a: real;

end

Алгоритм поиска имен в библиотеках


В первую очередь имя ищется в исходном модуле, затем в модулях, подключенных в разделе uses в порядке справа налево, и только потом - в подключенных библиотеках в порядке подключения

Согласно этому правилу в примере из предыдущего пункта переменная a будет иметь тип integer

В случае коллизии имен используемое имя можно предварять именем библиотеки с последующей точкой:

{$reference ABCdll}
{$reference ABC1dll}

begin
writeln(ABC1aGetType);
end

Модуль Graph3D реализует трехмерные графические объекты с возможностью масштабирования, группировки, поворотов, перемещения, создания дочерних объектов

Модуль Graph3D предназначен для обучения основам объектно-ориентированного программирования и основам 3D-графики Он позволяет создавать простейшие трехмерные анимации и простейшие интерактивные трехмерные программы и игры

Модуль Graph3D основан на библиотеке Helix Toolkit WPF

Модуль векторной графики ABCObjects предназначен для быстрого изучения основ объектно-ориентированного программирования, а также позволяет создавать достаточно сложные игровые и обучающие программы

Модуль растровой графики GraphABC обходится без объектов, хотя его возможности практически совпадают с графическими возможностями Borland Delphi Он доступен в несобытийных программах и позволяет легко создавать анимацию без мерцания

Модуль GraphABC представляет собой простую графическую библиотеку и предназначен для создания несобытийных графических и анимационных программ в процедурном и частично в объектном стиле Рисовaние осуществляется в специальном графическом окне, возможность рисования в нескольких окнах отсутствует Кроме этого, в модуле GraphABC определены простейшие события мыши и клавиатуры, позволяющие создавать элементарные событийные приложения Основная сфера использования модуля GraphABC - обучение

Модуль GraphABC основан на графической библиотеке GDI+, но запоминает текущие перо, кисть и шрифт, что позволяет не передавать их в качестве параметров при вызове графических примитивов К свойствам пера, кисти и шрифта можно получать доступ как в процедурном, так и в объектном стиле Например, для доступа к цвету текущего пера используется процедура SetPenColor(c) и функция PenColor, а также свойство PenColor

В модуле GraphABC можно управлять самим графическим окном и компонентом GraphABCControl, на котором осуществляется рисование По умолчанию компонент GraphABCControl занимает всю клиентскую часть графического окна, однако, на графическое окно можно добавить элементы управления, уменьшив область, занимаемую графическим компонентом (например, так сделано в модулях Robot и Drawman)

Модуль GraphWPF представляет собой простую графическую библиотеку и предназначен для создания графических и анимационных программ в процедурном и частично в объектном стиле Рисование осуществляется в специальном графическом окне, возможность рисования в нескольких окнах отсутствует Кроме этого, в модуле GraphWPF определены простейшие события мыши и клавиатуры, позволяющие создавать элементарные событийные приложения Основная сфера использования модуля GraphWPF - обучение

Модуль GraphWPF основан на графической библиотеке WPF и является современной и усовершенствованной версией устаревшего модуля GraphABC

Модуль WPFObjects реализует векторные графические объекты с возможностью наложения друг на друга, создания составных графических объектов и многократного их вложения друг в друга Каждый векторный графический объект корректно себя перерисовывает при перемещении, изменении размеров и частичном перекрытии другими объектами

Модуль WPFObjects предназначен для раннего обучения основам объектно-ориентированного программирования, а также для реализации анимационных и интерактивных проектов средней сложности Модуль WPFObjects основан на графической библиотеке WPF и является современной и усовершенствованной версией устаревшего модуля ABCObjects

Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC, однако, обладает двумя дополнительными возможностями:

1 Спрайты автоматически анимируются в цикле, что управляется специальным таймером Можно регулировать скорость анимации каждого спрайта, а также останавливать/запускать все спрайты

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;
Очищает рисунок белым цветом



Подпрограммы для работы с координатами графического окна


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

Процедуры и функции для изменения системы координат окна приведены ниже:

procedure SetCoordinateOrigin(x0,y0: integer);
Устанавливает начало координат в точку (x0,y0)

procedure SetCoordinateScale(sx,sy: real);
Устанавливает масштаб системы координат

procedure SetCoordinateAngle(a: real);
Устанавливает поворот системы координат

Можно также изменять свойства системы координат графического окна через объект Coordinate

Подпрограммы режимов рисования


procedure SetSmoothing(sm: boolean);
Устанавливает режим сглаживания

procedure SetSmoothingOn;
Включает режим сглаживания

procedure SetSmoothingOff;
Выключает режим сглаживания

function SmoothingIsOn: boolean;
Возвращает True, если режим сглаживания установлен

procedure SetCoordinateOrigin(x0,y0: integer);
Устанавливает начало координат в точку (x0,y0)



§3Работа с графическим модулем средствами Pascal ABCNet

В рамках третьего параграфа было решено создать графический объект "Домик" при помощи инструментов модуля GraphABCNet


1Для этого необходимо подключить этот модуль GraphABC
с помощью uses
Program Domik;
uses Graphabc; //подключение модуля GraphABC


2После begin настраивается наша сцена:



Рис2Настройка окна программы

На рисунке 2 изображен процесс настройки окна при помощи свойства SetWindowWidth будет.. настраиватся ширина, при помощи SetWindowHeight будет настраиваться высота

3Настраиваем шрифт



Рис3 Настройка шрифта текста "Домик"

На рисунке 3 изображен процесс настройки текста при помощи свойства SetPenWidth задается толщина пера,SetFontSize задается размер шрифта,SetFountColor(clRed)настраивается цвет шрифта,SetFountStule(fsBold) настраивается стиль шрифта

4Выводим на форму текст

TextOut(100,100,'Домик'); //текст

5Задаем параметры окну



Рис4Прорисовка окна

На рисунке 4 изображен процесс прорисовки окна при помощи свойства Rectangle и Circle

6Задаем цвет окну



Рис5Заливка окна

На рисунке 5 изображен процесс заливки окна при помощи свойства SetBrushColor
7Далее строится сам домик



Рис6Настройка параметров домика

На рисунке 6 изображен процесс настройки параметров домика при помощи свойства Line задаются параметры окна,крыши и трубы


Рис7 Домик

Изображение домика создавалось при помощи базовых процедур библиотеки GraphABC Далее будет описан пример прорисовки другой фигуры


2 Программа Человечек
1Для этого опять же понадобиться подключить этот модуль GraphABC
с помощью uses

Program Figurka;

uses GraphABC;

2После begin настраивается наша сцена:



Рис8 Настройка параметров сцены

На рисунке 8 изображен процесс настройки параметров человечка при помощи свойства SetWindowSize задаются размеры графического окна, SetPenWidth устанавливается стиль пера, SetBrushColor(clFuchsia) настраивается цвет кисти

3Создаем саму фигурку



Рис9Человечек

На рисунке 9 изображен человечек при помощи свойств Circle задаются параметры окружности, Line задаются параметры линии, Rectangle задаются параметры прямоугольнику

Возможности PascalАВСNet в данной версии имеет очень много преимуществ по сравнению с предыдущими версиями PascalАВСNet содержит обширный набор типов констант и функций для управления графическим режимом работы экрана объединенных в стандартный библиотечный модуль Graph С помощью подпрограмм, входящих в данный модуль, можно создавать сложные графические изображения, основанные на использовании разнообразных геометрических фигур При необходимости замкнутые фигуры могут быть закрашены различными цветами и стилями(образцами) закраски Для вывода текстовых надписей на графический экран могут быть использованы четыре штриховых и один матричный шрифт

Преимущества модуля граф

1Модуль GraphABC основан на графической библиотеке GDI+, но запоминает текущие перо, кисть и шрифт, что позволяет не передавать их в качестве параметров при вызове графических примитивов К свойствам пера, кисти и шрифта можно получать доступ как в процедурном, так и в объектном стиле Например, для доступа к цвету текущего пера используется процедура SetPenColor(c) и функция PenColor, а также свойство PenColor

2 В модуле GraphABC можно управлять самим графическим окном и компонентом GraphABCControl, на котором осуществляется рисование По умолчанию компонент GraphABCControl занимает всю клиентскую часть графического окна, однако, на графическое окно можно добавить элементы управления, уменьшив область, занимаемую графическим компонентом (например, так сделано в модулях Robot и Drawman)

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

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

4 В модуле GraphABC определен ряд констант, типов, процедур, функций и классов для рисования в графическом окне Они подразделяются на следующие группы:

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

Функции для работы с цветом

Цветовые константы

Действия с пером: процедуры и функции

Действия с пером: объект Pen

Стиль пера

Действия с кистью: процедуры и функции

Действия с кистью: объект Brush

Стили кисти

Стили штриховки кисти

Действия со шрифтом: процедуры и функции

Действия шрифтом: объект Font

Стили шрифтом

Действия с рисунками: класс Picture

Действия с графическим окном: процедуры и функции

Действия с графическим окном: объект Window

Действия с системой координат: процедуры и функции

Действия с системой координат: объект Coordinate

Блокировка рисования и ускорение анимации

Режимы рисования

События GraphABC

Виртуальные коды клавиш

Перенаправление ввода-вывода

Типы и переменные модуля GraphABC

Color = SystemDrawingColor;

Тип цвета

Point = SystemDrawingPoint;

Тип точки

GraphABCException = class(Exception) end;

Тип исключения GraphABC

RedrawProc: procedure;

Процедурная переменная перерисовки графического окна Если равна nil, то используется стандартная перерисовка

DrawInBuffer: boolean;

Следует ли рисовать во в не экранном буфере
Заключение

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

При написании курсового проекта рассматривался вопрос создания графических изображений в среде программирования PascalАВСNet

Благодаря подробному описанию создания графических объектов, курсовой проект является наглядным примером по созданию графических рисунков и может служить вспомогательным средством создания любых объектов графики в графической среде языка программирования PascalАВСNet программ для начинающих программистов
Как видно из анализа полученных результатов можно наглядно посмотреть, какие объекты изображения можно получить в графической среде языка PascalАВСNet Для программистов и для тех, кто только начал изучать среду программирования языка PascalАВСNet следует обратить внимание на приложение, в котором наглядно показаны все команды, которые были использованы при создании мультипликационного персонажа «Домик» «Человечек»

В ходе исследования изучили:

Основные понятия графики, функции и процедуры, возможности создания графических изображений в среде программирования PascalАВСNet

В курсовом проекте был приведен краткий обзор программы PascalABCNET, рассмотрена ее структура, основные примитивы, а также более подробно рассмотрен графический модуль GraphАВС

Практическая значимость данного проекта довольно велика, тк работа с графикой очень распространена и основной сферой использования графического модуля является - обучение

Полученные при исследовании знания и навыки будут полезны нам при дальнейшей работе в PascalАВСNet, а также при работе с другими языками программирования

Список использованной литературы


1 ЛДАубакиров Языки программирования Астана, 2017г, 214c

2 А Н Мудров Программирование М, 2016г,125c

3 Программирование С Симонович, Г Евсеев, Москва: АСТ - ПРЕСС книга 2015г,300c

4 Практика программирования, Ю Кетков, А Кетков, СПб: БХБ/ Петербург, 2015г,256c

5 Паскаль для школьников С М Кашаев, Л В Шерстнева - Москва, БХВ-Петербург, 2017 г,112c

6 Информатика(Базовый курс) С В Симонович, СПб: Питер, 2016г,200c

7 Основы программирования: С Окулов - Москва, Бином Лаборатория знаний, 2018 г,154c

8 Языки программирования Концепции и принципы: В Ш Кауфман - Москва, ДМК Пресс, 2017 г,145c

9 Турбо Паскаль с графикой для персональных компьютеров/Перс польск ДИЮренкова М:Мфшиностроение,2019,135c

10 Основы программирования в задачах и примерах, А В Милов, Харьков: ФОЛИО, 2017г,160c

11 Практикум по программированию на языке Паскаль, Касторнов А Ф, Касторнова В А , Москва, 2019,180c

12 http://pascalcoderru/

13 http://saasslattutby/Grafika_Pascal/index16ht m

14 http://wwwinformancerru /uncategorized/grafika-v-t urbo-pascal/

15 http://life-progru
Приложение 1

Program Domik;

uses Graphabc; //подключение модуля GraphABC

begin

SetWindowWidth(800); //ширина окна программы

SetWindowHeight(600); //высота окна программы

SetPenWidth(3); //толщина пера

SetFontSize(18); //размер шрифта

SetFontColor(clRed); //цвет шрифта

SetFontStyle(fsBold); //жирный стиль шрифта

TextOut(100,100,'Домик'); //текст

Rectangle(200, 300, 600,600); //дом

Circle(400,225, 40); //круг

SetBrushColor(clyellow); //цвет заливки окна

FillRect(300, 400,500,500); //процедура заливки окна

rectangle(300,400,500,500); //окно

Line(400,400,400,500); // окно

Line(300,450,500,450); //окно

Line(200,300,400,150); //крыша

Line(400,150,600,300); //крыша

Line(480,210,480,160); //труба

Line(480,160,520,160); //труба

Line(520,160,520,240); //труба

end

Приложение 2


Program Figurka;

uses GraphABC;

begin

SetWindowSize(500, 500); //задаем размер графического окна

SetPenWidth(3); //устанавливаем стиль пера

SetBrushColor(clFuchsia); //устанавливаем цвет кисти

Circle(225,160,50); //рисуем окружность

Line(225,160,225,180); //рисуем линии

Line( 210,190,240,190);

Line( 225,210,225,250);

Line( 100,100,200,260);

Line( 200,260,400,260);

Line( 210,350,200,480);

Line(240,350,250,480);

Rectangle(200,230,250,350); //рисуем прямоугольник SetBrushColor(clLime);

FillRect(0, 480,500,500); //рисуем закрашенный прямоугольник

SetBrushColor(clWhite);

Circle(205,150,10);

Circle(245,150,10);

end


написать администратору сайта