Паскаль абс графика примеры программ

Если в текстовом режиме работы Pascal минимальной единицей экрана является символ, то в графическом режиме – пиксел. Пиксел имеет координаты (X и Y) и цвет (по умолчанию белый). Координаты отсчитываются с левого верхнего угла, т.е. пиксел, расположенный в верхнем левом углу имеет координаты (0,0).
Для того чтобы включить графический режим в Паскале, необходимо подключить его в разделе объявления модулей (USES). В этом уроке мы научимся запускать графический режим и выводить на экран точку.

Запуск графического режима в Паскаль. Вывод точки на экран.

Program graphika1; uses crt, graph; var gd, gm:integer; color: byte; begin clrscr; gd:=detect; initgraph (gd,gm, ‘’); if graphresult<>grok then halt(1); randomize; repeat color:=random(15); putpixel (random (100), random(100), color); delay (10) until keypressed; closegraph end.

В строке №2 объявляем модули CRT и GRAPH. Без этих модулей графический режим работать не будет.

В строке №3 объявляются переменные «gd» и «gm». Дело в том, что для работы графического режима в Паскаль необходимо указывать тип видеоадаптера, установленного на компьютере, а также режим работы для этого видеоадаптера (разрешение экрана). Первая переменная «gd» определяет тип драйвера адаптера, вторая – режим работы адаптера.

Строим график в PascalABC

Cтрока №7. Если Вы не знаете о том, какой тип видеоадаптера установлен на вашем компьютере, то для переменной «gd» указывается значение «detect». Благодаря этому Паскаль определит драйвер адаптера автоматически. Для переменной «gm», которая отвечает за режим работы адаптера, мы не будем указывать значение. Поэтому режим работы адаптера будет выбираться с самым высоким разрешением (по умолчанию).

В строке №8 записывается процедура Initgraph. Эта процедура инициализирует (запускает) графический режим. В круглых скобках через запятую записываются переменные «gd» и «gm». Также здесь в кавычках необходимо указать путь к программе – драйверу с расширением bgi. По умолчанию, после установки Паскаль на компьютер эта программа – драйвер находится в директории fpc/units/i386-win32/graph.

Для того чтобы не указывать путь к программе – драйверу (как в нашем примере) необходимо в директории fpc/units/i386-win32/graph скопировать 2 файла: graph.o и graph.ppu, и вставить их в директорию fpc/bin/i386-win32. Таким образом, эти файлы, отвечающие за графический режим, теперь находятся в текущей директории. И нам не нужно указывать к ним путь, достаточно поставить кавычки.

Строка №9 и №10 говорит о том, что если инициализация не была успешной, то программа остановится.
В строке №17 задаем процедуру, которая закрывает графический режим и делает экран снова текстовым.
Запомните эти строки (№2,3,7,8,9,10,17). Их можно использовать в качестве шаблона при написании программ, которые требуют запуска графического режима.

В строке №4 мы объявляем переменную color. В неё мы будем записывать значения для цвета пикселей. Всего в Паскале есть 15 различных цветов. Они обозначаются целыми числами от 0 до 15. Поэтому для переменной color мы указываем тип данных byte (целый тип 0…255).

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

Pascal. Работа с графикой (Ellipse, rectangle, circle, textout)

Строка №11. Процедура Randomize инициализирует датчик случайных чисел.

В строке №12 начинается цикл, который повторяется до тех пор, пока мы не нажмем на какую-нибудь клавишу (строка №16) (until keypressed означает: до тех пор, пока не будет нажата клавиша). Цикл будет действовать на 3 оператора, которые находятся в строках №13 — №15.

В строке №13 мы присваиваем переменной color случайное число от 1 до 15, с помощью функции Random.

В строке №14 вызываем процедуру Putpixel. Эта процедура создает точку на экране в графическом режиме (Putpixel от англ. – поставить пиксел). В круглых скобках указываются координаты этой точки и ее цвет. В нашем примере координаты имеют значение (random (100), random(100)). Т.е. координаты будут генерироваться случайно. Цвет имеет значение «color».

Он также генерируется случайно (строка №13). Как видите переменную «color» для определения цвета можно было не создавать. Достаточно было в строке №14 вместо «color» записать «random(15)». Таким образом, у нас получается, что процедура putpixel будет выводить на экран точку со случайными координатами и цветом.

В строке №15 вызывается процедура Daley. Прoцедура Daley используется для задержки действий в цикле. В круглых скобках указывается время задержки. Daley(1000) означает задержку в одну секунду. Таким образом, получается что точки (пикселы) будут выводится на экран с задержкой в 0,01 с.

grafika putpixel

После запуска программы откроется консольное окно программы Pascal , в котором ничего не будет, а через несколько секунд откроется 2-ое окно – графическое, где можно будет увидеть результаты работы программы.

grafika putpixel..

grafika putpixel.

Закрыть графическое окно можно, нажав на крестик в правом верхнем углу графического экрана, либо нажав на любую клавишу в текстовом режиме.

Источник: mojainformatika.ru

Паскаль абс графика примеры программ

Графические возможности. Модуль GraphABC Модуль GraphABC предназначен для создания графических и анимационных программ. Рисование происходит в специальном графическом окне. Начало координат (0,0) находится в левом верхнем углу. Координаты — целые положительные числа (пикселы).

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

Команды для рисования

SetWindowSize(X,Y); Устанавливает размеры графического окна (в пикселах)
SetPixel(x,y,c) Рисование точки с координатами (х,у) цветом с
ClearWindow(c) Очистка (заливка) окна цветом
Line(x1,y1,x2,y2); Рисует отрезок от точки (x1,y1) до точки (x2,y2)
FloodFill(x,y,c) Закрасить замкнутую область, содержащую точку (х, у) цветом с
SetPenColor(c) Установить цвет пера
SetPenWidth(n) Установить толщину пера в пикселах
SetPenStyle(s) Установка стиля пера
SetBrushColor(c) Установка цвета кисти
Rectangle(x1,y1,x2,y2) Рисование закрашенного прямоугольника
Circle(x,y,r) Рисование закрашенной окружности
SetFontStyle(fs) Установка стиля шрифта
SetFontSize(n) Установка размера шрифта в пикселах
TextOut(x,y,’текст’) Вывод текста в прямоугольник с координатами лев.верх.угла (x, y)

Источник: samlib.ru

Паскаль абс графика примеры программ

Пример работы с графикой в нашей системе.

Читайте также:
Андроид 9 программы лучшие

uses oglgraph; // Необходимая библиотека, у нас заменяет graph var gd, gm: smallint; // Имена не важны, а тип переменных — важен begin gd := Detect; // Автоматическая установка разрешения gm := DetectMode; initgraph(gd, gm, »); // Открытие «графического окна» setcolor(green); line(0, 0, 100, 100); repeat until graphkeypressed; // Задержка закрытия графического окна до нажатия // клавиши для завершения работы программы — // иначе рискуете ничего толком не увидеть closegraph(); // закрытие графического окна — не обязательно, но рекомендуемо. end.
Mx := GetMaxX div 2; My := GetMaxY div 2; for y := -my to my do for x := -mx to mx do begin n := 0; c.x := x * 0.005; c.y := y * 0.005; z.x := 0; z.y := 0; while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do begin t := z; z.x := sqr(t.x) — sqr(t.y) + c.x; z.y := 2 * t.x * t.y+ c.y; Inc(n); if KeyPressed then Cancel := true; end; if n < iter then begin PutPixel(mx + x,my + y,16 — (n mod 16)); end; if Cancel then exit; end;

Примеры

Среди примеров — часто возникающие задачи.

Определение размеров экрана для рисования рамки экрана

uses oglgraph; var gd, gm: smallint; maxx, maxy : integer; begin gd := Detect; gm := DetectMode; initgraph(gd, gm, »); maxx := getmaxx(); maxy := getmaxy(); setcolor(blue); rectangle(1, 1, maxx — 1, maxy — 1); repeat until graphkeypressed; closegraph(); end.

Изменение цвета экрана заливкой

uses oglgraph; var gd, gm: smallint; color : integer; begin gd := Detect; gm := DetectMode; initgraph(gd, gm, »); color := white; setBkColor(color); cleardevice; . repeat until graphkeypressed; closegraph(); end.

Изменение цвета экрана

. initgraph(gd, gm, »); color := white; setfillstyle(1, color); floodfill(0,0,red); .

Процедуры и функции

getmaxX()
getMaxY()
getX()
getY()
moveTo(x, y)
moveRel(dx, dy)
setColor(color)
setLineStyle(LineStyle, Pattern, Thickness)
setBkColor(color)
cleardevice
setFillStyle(pattern, color)
putPixel(x, y, color)
getPixel(x, y)
line(x1, y1, x2, y2)
lineTo(x, y)
lineRel(dx, dy)
drawPoly(n, var An)
circle(centerX, centerY, radius)
arc(centerX, centerY, angle1, angle2, radius)
ellipse(centerX, centerY, angle1, angle2, radiusX, radiusY)
rectangle(x1, y1, x2, y2)
bar(x1, y1, x2, y2)
bar3D(x1, y1, x2, y2, l, b)
fillEllipse(centerX, centerY, radiusX, radiusY)
fillPoly(n, an)
pieSlice(centerX, centerY, angle1, angle2, radius)
sector(centerX, centerY, angle1, angle2, radiusX, radiusY)
floodFill(x, y, color)

Типы линий

Имя Описание
SolidLn Сплошная линия
DottedLn Пунктирная линия
CenterLn
DashedLn
UserBitLn Пользовательский тип. Требуется задать параметр Pattern в процедуре setLineStyle значением от 0 до 65535

Толщина линий

Имя Значение Описание
NormWidth 1 Обычная линия
ThickWidth 3 Жирная линия

Обратите внимание, что значение параметра не задает толщину линии, а указывает режим рисования. Написать setLineStyle(LineStyle, Pattern, 4); , вообще говоря, ошибка!

Стили заливки

Имя Значения Описание
EmptyFill
SolidFill 1 Сплошная заливка
LineFill 2
LtSlashFill 3
SlashFill 4
BkSlashFill 5
LtBkSlashFill 6
HatchFill 7
XHatchFill 8
InterleaveFill 9
WideDotFill 10
CloseDotFill 11

Немигающий экран

Чтобы избежать мигания экрана при перерисовке «заполненных» объектов, применяется метод двойной буферизации. При этом используются два виртуальных экрана, один из которых виден, а другой в это время — перерисовывается. Затем он показывается на экране, а видимый ранее — убирается и перерисовывается.

Читайте также:
Требовалось написать программу при выполнении которой с клавиатуры считывается

В начале рисования один раз командой SetDoubleBuffer(true) вызывается двойная буферизация, затем, после прорисовки каждого нового кадра, производится обмен вновь перерисованого кадра с тем, который был показан на экране, командой graphSwapBuffers .

Отключается войная буферизация командой SetDoubleBuffer(false) ;

Установка произвольного разрешения

m640x200x16 = VGALo; m640x400x16 = VGAMed; m640x480x16 = VGAHi;
< VESA Specific video modes. >m320x200x32k = $10D; m320x200x64k = $10E;
m640x400x256 = $100;
m640x480x256 = $101; m640x480x32k = $110; m640x480x64k = $111;
m800x600x16 = $102; m800x600x256 = $103; m800x600x32k = $113; m800x600x64k = $114;

m1024x768x16 = $104; m1024x768x256 = $105; m1024x768x32k = $116; m1024x768x64k = $117;
m1280x1024x16 = $106; m1280x1024x256 = $107; m1280x1024x32k = $119; m1280x1024x64k = $11A;

Работа с клавиатурой

В графическом режиме обработка событий клавиатура происходит очень похоже на текстовый режим, так как реализованы аналоги функций readkey и keypressed из модуля crt. В модуле oglgraph они называются graphreadkey и graphkeypressed.

Функция graphkeypressed служит для определения события нажатия на клавиатуру, это логическая функция, которая возвращает два значения: истина или ложь. Обычно результатом ее работы будет всегда false, кроме того случая если нажата какая-нибудь клавиша на клавиатуре. В примерах выше это ее поведение используется для остановки выполнения программы перед закрытием графического режима:

repeat until graphkeypressed;

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

Функция graphreadkey так же реагирует на нажатия, но в результате работы возвращает скан-код клавиши, т.е. уникальное целочисленное значение, которое соответствует коду клавиши, генерируемому контроллером клавиатуры.

code := graphreadkey;

Особенностью это функции является то, что она блокирует исполнение программы до того момента пока не будет нажата клавиша. Если же требуется реализовать работу с клавиатурой, которая бы не останавливала работу программы, то в этом случае нужно предварительно сделать проверку на нажатие клавиши с помощью graphkeypressed:

if graphkeypressed then code := graphreadkey;

Напишем программу, которая опрашивает клавиатуру и выводит на экран коды клавиш:

uses oglgraph; var gd, gm, code: smallint; begin gd := Detect; gm := DetectMode; initgraph(gd, gm, »); while true do begin if graphkeypressed then begin code := graphreadkey; writeln(code); end; end; closegraph; end.

Примечания

Все параметры графических процедур и функций — целые числа.

Ось Y направлена вниз. Следовательно, координаты левого верхнего угла — (0, 0).

Все процедуры и функции можно разбить на три группы.

Функции и процедуры, позволяющие узнать текущие настройки, начинаются с «get…» (getcolor и др.).

Процедуры, устанавливающие параметры рисования — с «set…» (setcolor и др.).

Процедуры, осуществляющие рисование и все остальные, называются кто во что горазд, но более или менее осмысленно (circle, floodfill …). «Рисующие» процедуры пользуются ранее установленными настройками или настройками по умолчанию. При изменении настроек, ранее сделанные рисунки не меняются.

Источник: wiki.nsunc.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru