Сейчас, в преддверии Нового Года мне хочется Вас немного «повеселить». Предупреждаю, графика в Паскале не для всех веселая тема. Эта статья не будет посвящаться тому, чтобы обучать Вас этому делу. Но, скорее всего, до этого мы дойдем в других статьях.
В этой же — я хочу показать на Вам примерах, чего можно достичь, используя модуль Graph в Паскале, а в компиляторе PascalABC.NET — GraphABC, который работает несколько по-другому. И вот пример простейшей программы для компилятора PascalABC.NET.
Program snegovik; uses graphABC; begin FloodFill(50, 80, clYellow); setpenwidth(3); setwindowsize(400, 500); ellipse(120, 350, 280, 480); circle(200, 300, 60); circle(200, 210, 40); line(170, 120, 230, 120); line(160, 180, 240, 180); line(170, 120, 160, 180); line(230, 120, 240, 180); floodfill(200, 173, clblack); floodfill(200, 123, clblack); setbrushcolor(clblack); circle(190, 200, 5); circle(210, 200, 5); line(200, 210, 220, 220); line(200, 220, 220, 220); line(200, 210, 200, 220); floodfill(204, 214, clblack); setpenwidth(5); line(210, 230, 190, 230); line(70, 320, 170, 250); line(230, 250, 330, 300); line(327, 450, 327, 200); circle(200, 265, 10); circle(200, 300, 10); circle(200, 338, 10); circle(200, 390, 10); circle(200, 428, 10); circle(200, 460, 10); end.
Данная программа нарисует снеговика. setpenwidth(3) — устанавливается толщина кисти,ellipse рисует эллипс. circle(x,y,r) рисует окружность с центром в точке (x,y) радиусом r. Команда FloodFill(x,y,color) принимает 3 параметра и заливает область, начиная из точки с координатами (x,y) цветом color.
УРОК 16. Графические возможности среды программирования (8 класс)
Команда Line(x, y, x1, y1) — это линия, а (x,y, x1,y1,) — координаты точек начала и конца отрезка, setbrushcolor(clblack) — устанавливается цвет кисти. Вот пример следующей программы, которая нарисует нарядную новогоднюю елочку.
Program Elka; uses GraphABC; begin for var i := 1 to 100 do begin Pen.Color := RGB(2, 200, i); Line(100 — i, i, 100 + i, i); end; for var i := 1 to 100 do begin Pen.Color := RGB(0, i, 0); Line(100 — i, i + 100, 100 + i, i + 100); end; for var i := 1 to 100 do begin Pen.Color := RGB(0, i, 0); Line(100 — i, i + 200, 100 + i, i + 200); end; Setpenwidth(1); Setpencolor(clBrown); Rectangle(75, 301, 125, 375); FloodFill(77, 350, clBrown); Circle(50, 80, 20); Circle(153, 80, 20); Circle(100, 50, 15); Circle(100, 160, 20); Circle(50, 180, 20); Circle(153, 180, 20); Circle(100, 255, 20); Circle(153, 277, 20); Circle(50, 277, 20); FloodFill(50, 80, clRed); FloodFill(153, 80, clRed); FloodFill(100, 50, clBlue); FloodFill(100, 160, clPurple); FloodFill(50, 180, clYellow); FloodFill(153, 180, clYellow); FloodFill(50, 277, clYellow); FloodFill(100, 255, clRed); FloodFill(153, 277, clYellow); end.
В циклах рисуются треугольники(сама елочка). Причем, они не однотонные, это достигается так, что при увеличении счетчика i изменяется цвет и длина линии, остальные команды упомянуты выше. Я хочу привести пример результата работы уже готовой программы, которая гораздо сложнее предыдущих, кроме того, в ней используется объектно-ориентированное программирование, что намного сложней, чем структурное программирование.
Урок 22. Оператор WHILE — функции, графики и обработка цифр. Программирование на Pascal / Паскаль
Результат этой программы вы видите на скриншоте компилятора — это анимация. К этой программе мы вернемся позже, когда будем осваивать ООП(объектно-ориентированное программирование).
Источник: kvodo.ru
Графика в Паскаль
С помощью графики в Паскаль можно рисовать фигуры и изображения, визуализировать математические вычисления и использовать элементы графики в компьютерных играх. Мы познакомимся как задавать графический режим в паскаль, рисовать точки, окружности, линии, выводить текст в графическом режиме паскаль.
Для того, чтобы рисовать графические фигуры в Паскаль нужно импортировать модуль GraphABC. В Паскаль это можно сделать с помощью команды uses GraphABC .
Чтобы начать работу с графикой в Pascal нужно задать окно для графики. В модуле GraphABC это можно сделать с помощью команды setWindowSize(x, y) , где x это ширина окна, а y высота.
С помощью модуля GraphABC на Паскале можно отобразить точку, линию, прямоугольник, прямоугольник с закруглёнными краями, окружность, дуга, сектор круга, можно вывести текст на экран.
Чтобы задать расположение объекта в графическом окне Паскаль, нужно указать его координаты в системе координат. Начало координат находится в левом верхнем углу окна для графики.Положительное направление оси X слева направо, оси Y сверху вниз. Чем больше X, тем правее точка, чем больше Y, тем точка ниже.
В Pascal в модуле GraphABC был создан новый тип данных для цвета. Цвет задаётся с помощью строки clЦвет . Чтобы установить цвет рисования графических фигур в паскаль, необходимо использовать команду
Основные цвета в графических программах на паскале
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Рисование точки в Паскаль
putPixel(x, y, color) , где x и y это координаты точки, color это цвет точки.
Пример программы в паскаль рисование красной точки
uses GraphABC;
begin
setWindowSize(500, 500);
putPixel(30, 30, clRed);
end.
Рисование линии в Паскаль
line(x1, y1, x2, y2) x1, y1 это координаты начала линии, x2, y2 координаты конца линии.
Пример программы в Паскаль рисование линии
uses GraphABC;
begin
setWindowSize(500, 500);
line(30, 30, 40, 40, clBlue);
end.
Рисование прямоугольника в Паскаль
rectangle(x1, y1, x2, y2) x1, y1 это координаты первой точки, x2, y2 координаты второй точки.
Пример программы на паскаль рисование прямоугольника
uses GraphABC;
begin
setWindowSize(500, 500);
rectangle(200, 200, 320, 350);
end.
Для задания в Паскаль прямоугольника с закруглёнными краями используется команда roundRect(x1, y1, x2, y2, w, h) , x1, y1 это координаты первой точки, x2, y2 координаты второй точки, w и h это ширина и высота закругления краёв.
uses GraphABC;
begin
setWindowSize(500, 500);
roundRect(350, 300, 450, 340, 40, 40);
end.
Рисование окружности в Паскаль
drawcircle(x, y, r) где x и y это координаты центра окружности, r это радиус окружности.
пример программы на Паскаль рисование окружности
uses GraphABC;
begin
setWindowSize(500, 500);
drawcircle(47, 47, 10);
end.
Для того,чтобы нарисовать закрашенный круг используется набор команда
SetBrushColor(цвет заполнения круга);
SetPenColor(цвет границы);
cirlce(x, y, r) где x и y это координаты центра круга, r это радиус круга
Пример программы на паскаль для рисования закрашенного круга
uses GraphABC;
begin
setWindowSize(500, 500);
SetBrushColor(clGreen);
SetPenColor(clRed);
circle (100,100,50);
end.
Для рисования эллипса в Паскаль используется команда ellipse(x1, y1, x2, y2), где x и y координаты прямоугольника, ограничивающего эллипс.
uses GraphABC;
begin
setWindowSize(500, 500);
ellipse(100, 100, 150, 200);
end.
Задание дуги и сектора окружности в паскаль схожи. При их задании задаются координаты центра круга, по которому они будут отображаться, радиус этого круга и градусная мера дуги. При задании дуги на экран выводится только сама дуга. В отличии от дуги, при задании сектора отображается не только дуга, но и два отрезка, исходящие из центра окружности, они опираются на дугу.
Дуга рисуется в Паскаль с помощью команды arc(x, y, r, a1, a2) , Сектор в Паскаль рисуется с помощью команды pie(x, y, r, a1, a2) , где x и y это координаты центра окружности, r это радиус окружности, a1 это начальная градусная мера дуги, a2 это конечная градусная мера дуги. Дуги и секторы задаются против часовой стрелки.
Пример программы в паскаль рисование дуги и сектора
uses GraphABC;
begin
setWindowSize(500, 500);
arc(10, 200, 50, 0, 60);
pie(10, 300, 50, 0, 60);
end.
Для вывода текста на экран в графическом режиме Паскаль
используется команда textOut(x, y, s) , где x и y это координаты левой верхней части текста, s это выводящийся текст.
Пример программы на паскаль вывод текста в графическом режиме
uses GraphABC;
begin
setWindowSize(500, 500);
textOut(100, 200, ‘текст’);
end.
Для заливки отображённых объектов в Паскаль используется команда floodFill(x, y, color) , где x и y это координаты точки, находящейся в полости объекта.
Пример программы на паскаль рисование закрашенного прямоугольника
uses GraphABC;
begin
setWindowSize(500, 500);
rectangle(200, 200, 320, 350);
floodFill(250,250, clRed);
end.
В модуле GraphABC в Pascal можно изменять само перо. Для изменения цвета используется setPenColor(color) . Для изменения толщины используется setPenWidth(px) , ширина кисти измеряется в пикселях. Для изменения стиля пера используется команда setPenStyle(x) , в качестве аргумента туда вводится стиль пера, их существует три типа (clSolid, clClear, clDash).
При выведении текста можно изменять его цвет и стиль., для этого есть команда setFontColor(color) и setFontStyle(fsStyle) . Существуют стили fsNormal (обычный), fsBold (полужирный), fsItalic (курсив) и fsUnderline (подчёркивание), можно создавать и их комбинации, например, fsBoldItalicUnderline.
Полезно почитать по теме графика в паскаль
Источник: itrobo.ru
Учебник по программированию.
В данной главе мы изучим принципы работы с графикой. Для этих целей в PascalABC.NET специально был создан модуль GraphABC. Так же стоит сказать, что изучение программирования под операционную систему DOS у нас закончилось, и мы начнём создавать программы под операционную систему Windows.
§20. Модуль GraphABC.
Создадим новую программу, ничего не выполняющую, и подключим к ней модуль GraphABC. Сделать это можно с помощью шаблона – наберите gr и нажмите «Shift+Пробел». Получим следующий код:
Теперь после запуска такой программы мы увидим не консольное приложение, а обычное Windows-овское окно:
В этом и заключается преимущество PascalABC.NET (в смысле обучения) над другими интегрированными средами разработки. Нам нет необходимости писать код для создания окна, достаточно просто подключить модуль GraphABC к программе, и окно будет появляться автоматически. В таком случае мы можем сосредоточиться на изучении именно графики, а не проходить параллельно курс программирования под операционную систему Windows.
Внимательно посмотрите на окно. Вверху окна вы увидите четыре стандартных кнопки – одна слева и три справа. При нажатии левой кнопки появляется меню с командами:
О назначении трёх правых вы наверняка знаете не хуже меня – это свернуть, развернуть и закрыть.
По краям окна находится синяя окантовка или бордюр. Большая часть окна заполнена белым цветом – это клиентская часть. Именно в этой части окна мы и будем выводить наши графические рисунки.
Любое цифровое изображение формируется с помощью точек, которые называются пикселями. Они достаточно малы по сравнению с самим изображением, поэтому мы их не видим. Каждая точка в зависимости от изображения имеет свой цвет. Все вместе пиксели разных цветов и формируют понятное нам изображение.
Вся клиентская часть нашего окна поделена на точки (пиксели), которые имеют свои собственные координаты. Отчёт точек начинается с верхнего левого угла. Для того, что бы было понятно можно условно провести с лева на право ось Х, и с верху в низ ось У. Наглядно это демонстрирует следующий рисунок, на котором изображена буква Т:
На рисунке закрашенными в чёрный цвет являются пиксели со следующими координатами: (2;2), (3;2), (4;2), (5;2), (6;2), (4;3), (4;4), (4;5), (4;6). Здесь можно провести следующую аналогию: в консольном окне символы тоже имеют свои координаты, только там не оси Х и Y, а порядковый номер символа в строчке и номер строчки соответственно.
Здесь же стоит отметить, что если вы не сделали ни каких инициализирующих действий, то размер клиентской части нашего окна по умолчанию будет иметь размер 640х480 точек.
В данной главе изучение модуля GraphABC начнём с так называемых графических примитивов. К ним относятся следующие элементы: текст, точка, отрезок (линия), круг, окружность, дуга, прямоугольник, прямоугольник со скруглёнными краями и эллипс. Остальные возможности этого модуля будут приведены в виде обзора в 32 параграфе.
Текст. Текст рисуется с помощью следующей процедуры:
procedure TextOut (x,y: integer; s: string); – выводит строку s в прямоугольник с координатами левого верхнего угла (x,y). Пример:
TextOut( 10 , 10 , ‘Привет всем!’ );
Шрифт текста, который рисуется с помощью данной процедуры можно менять следующими подпрограммами:
procedure SetFontSize (size: integer); – устанавливает размер шрифта в пунктах.
function FontSize : integer; – возвращает размер шрифта в пунктах.
procedure SetFontName (name: string); – устанавливает имя шрифта.
function FontName : string; – возвращает имя шрифта.
procedure SetFontColor (c: Color); – устанавливает цвет шрифта. О цветах поговорим отдельно в следующем подразделе.
function FontColor : Color; – возвращает цвет шрифта.
procedure SetFontStyle (fs: integer); – устанавливает стиль шрифта.
function FontStyle : integer; – возвращает стиль шрифта.
В модуле GraphABC определены следующие константы для установки стилей шрифта:
- fsNormal – обычный;
- fsBold – жирный;
- fsItalic – наклонный;
- fsBoldItalic – жирный наклонный;
- fsUnderline – подчеркнутый;
- fsBoldUnderline – жирный подчеркнутый;
- fsItalicUnderline – наклонный подчеркнутый;
- fsBoldItalicUnderline – жирный наклонный подчеркнутый.
function TextWidth (s: string): integer; – возвращает ширину строки s в пикселях при текущих настройках шрифта.
function TextHeight (s: string): integer; – возвращает высоту строки s в пикселях при текущих настройках шрифта.
var x,y, //Координаты для вывода текста
xTemp,yTemp: byte ; //Координаты для вывода второй строки
SetFontName( ‘Times New Roman’ );
//Выводим первую строку
TextOut(x,y, ‘Привет всем!’ );
//Формируем координату для второй строки
xTemp:=x+Round(TextWidth( ‘Привет всем!’ )/ 2 )-
Round(TextWidth( ‘Дорогие друзья!’ )/ 2 );
//Выводим вторую строку
TextOut(xTemp,yTemp, ‘Дорогие друзья!’ );
Обратите внимание, что при формировании координат для второй строки, была использована функция Round, округляющая вещественное число до ближайшего целого. Дело в том, что координаты пикселей могут иметь только целые значения.
Так же обратите внимание на то, что в данном примере мы вывели первую строку, используя координаты x,y. Координаты для второй строки были рассчитаны относительно этих же координат. В таком случае можно менять координаты x и y, и при этом строки относительно друг друга своё положение не изменят. Так же можно менять размер и стиль шрифта. Например, если сделаем x=10,y=20, размер шрифта равным 10 и стиль шрифта fsBold, то получим следующий результат :
Здесь координаты x,y являются абсолютными, а xTem, yTemp – относительными. Очень часто заранее неизвестно, где будет находиться тот или иной элемент изображения. Поэтому необходимо во время выполнения программы вычислять его координаты относительно какого-либо другого элемента. Отсюда и название – относительные координаты.
Цвета. Всего в модуле GraphABC определено 141 константа для установки цвета. Все они начинаются с префикса cl, поэтому, набрав этот префикс, вам всплывёт подсказка, в которой вы увидите весь список доступных цветов. Для этого должна быть включена подсказка по нажатию клавиш. Об этом речь шла в 16-ом параграфе.
Так же про цвета вы можете узнать в справке в пункте: «Стандартные модули -> Модуль GraphABC -> GraphABC: цветовые константы».
Плюсом к вышесказанному о цветах предлагаю написать небольшую программку, которая будет выводить цвет и его название:
var mC: array [ 1..141 ] of Color;
mC[ 1 ]:=clAquamarine;
mC[ 140 ]:=clYellow;
mC[ 141 ]:=clYellowGreen ;
for var i:= 1 to 141 do
Rectangle(x,y,x+ 100 ,y+ 10 );
TextOut(x,y+ 10 ,mC[i].Name);
if x> 1200 then begin x:= 5 ; y:=y+ 35 end ;
В целях экономии бумаги, заполнение всего массива цветов приводить не стал. Если будете сами набирать данную программу, то можете скопировать константы из справки.
Так же стоит сказать, что тип Color – структурированный тип запись. Поэтому он имеет поле Name, в котором содержится имя цвета. Для того, что бы использовать этот цвет в программе к этому имени необходимо добавить префикс cl.
В предыдущем абзаце было сказано, что тип Color – тип запись. Это не совсем верно. В дальнейшем, когда будем изучать ООП, мы узнаем что такое на самом деле тип Color. На данном этапе предлагаю воспринимать его, как тип запись.
Точка. Для того, что бы нарисовать или стереть точку имеется следующая процедура:
procedure SetPixel (x,y: integer; c: Color); – закрашивает пиксель с координатами (x,y) цветом c.
Если необходимо стереть точку, то на её месте можно нарисовать точку цвета окружающего фона. Для того что бы узнать цвет окружающего фона есть процедура, которая позволяет узнать цвет точки в определённом месте:
function GetPixel (x,y: integer): Color; – возвращает цвет пикселя с координатами (x,y).
С помощью процедуры SetPixel удобно рисовать графики всевозможных функций. Например, следующий код демонстрирует вывод синусоидальной функции на экран:
for var i:= 1 to 640 do
SetPixel(i,Round(Sin(i/ 8 )* 10*(-1) + 20 ),clBlack);
Здесь хочу заострить ваше внимание на следующем нюансе: для формирования координаты Y, написано следующее выражение:
Sin(i/ 8 )* 10*(-1) + 20
Поделив i на 8, мы увеличили период, т.е. растянули график по оси Х. Помножив на 10, мы увеличили амплитуду. Т.е. растянули график по оси У. Т.к. обычно ось Y всегда направлена снизу вверх, то пользователю будет нелепо видеть, что синусоидальная функция вначале убывает, а потом возрастает. Поэтому нам необходимо было помножить получившееся значение на -1 для того что бы перевернуть график. Добавив 20, мы сместили график в низ на 20 пикселей. При этом мы получили довольно красивую картинку.
Без этих манипуляций, т.е. просто написав Round(sin(i)), мы бы получили не работающую программу т.к. получили бы отрицательные значения по оси Y, а т.к. пикселей с отрицательными координатами нет, то программа во время выполнения закрылась бы с ошибкой. Но даже если мы добавим 20 и тем самым сместим график вниз, то всё равно получится не со всем то, что бы хотел увидеть пользователь:
К чему все эти рассуждения. Дело в том, что при выводе результатов каких либо вычислений на экран, вам придётся заботиться о том, что бы они были удобными для восприятия пользователем.
Отрезок. Самая простая процедура для рисования отрезка – это:
procedure Line (x1,y1,x2,y2: integer; c: Color); – рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c. Думаю, что здесь всё понятно, никаких дополнительных пояснений не требуется.
Есть ещё одна процедура:
procedure LineTo (x,y: integer; c: Color); – рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция при этом переносится в точку (x,y) . Здесь стоит остановиться на том, что такое текущая позиция. Так же как и при работе с типизированными файлами существует некая переменная, которая хранит в себе координаты текущей позиции. Текущую позицию можно изменить с помощью следующей процедуры:
procedure MoveTo (x,y: integer); – устанавливает текущую позицию рисования в точку (x,y).
С помощью процедуры LineTo удобно рисовать непрерывную ломаную линию:
for var i:= 1 to 64 do
LineTo(i* 10 ,Random( 1 , 29 ),clBlack);
for var i:= 1 to 64 do
LineTo(i* 10 ,Random( 30 , 59 ),clBlack);
При вызове процедур Line и LineTo цвет в качестве параметра можно не указывать. Тогда рисование линии будет происходить цветом, который установлен в свойствах пера. Здесь стоит отметить, что рисование линий и контуров других примитивов происходит как бы пером, поэтому цвет, толщина линии и стиль линии зависят от того как настроено перо.
Подпрограммы для настройки пера.
procedure SetPenColor (c: Color); – устанавливает цвет пера.
function PenColor : Color; – возвращает цвет пера.
procedure SetPenWidth (Width: integer); – устанавливает ширину пера в пикселях.
function PenWidth : integer; – возвращает ширину пера в пикселях.
procedure SetPenStyle (style: DashStyle ); – устанавливает стиль пера.
function PenStyle : DashStyle; – возвращает стиль пера.
Стили пера бывают следующие:
- psSolid – сплошное перо;
- psClear – прозрачное перо;
- psDash – штриховое перо;
- psDot – пунктирное перо;
- psDashDot – штрихпунктирное перо;
- psDashDotDot – альтернативное штрихпунктирное перо.
Далее пример, в котором настроенное перо рисует штриховую линию коричневого цвета, шириной в 3 пикселя:
for var i:= 1 to 32 do
LineTo(i* 20 ,Random( 1 , 29 ));
В данном параграфе мы познакомились с модулем GraphABC. Научились выводить в графическое окно текст и линию. А так же научились закрашивать пиксель определённым цветом и настраивать перо.
1. Начертить графики следующих функций, в диапазоне значений параметра от 0 до 12: а)
; б)
; б)
.
2. Перечертить на экран чертёж, представленный на рисунке в относительных координатах. Так же масштаб рисунка должен задаваться константой, при этом при смене масштаба рисунок должен сохранять пропорции. Размеры и выносные линии чертить не надо.
const m= 20 ; //Массштаб — 20 пикселей это одно реальное значение
var rX,rY: real ; //реальные значения параметров функции
//Чертим оси координат
Line( 20 , 100 , 285 , 100 );
Line( 30 , 20 , 30 , 110 );
//Стрелочки ось X
Line( 285 , 100 , 278 , 97 ); Line( 285 , 100 , 278 , 103 );
//Стрелочки ось Y
Line( 30 , 20 , 27 , 27 ); Line( 30 , 20 , 33 , 27 );
for var i:= 1 to 12 do
Line(temp, 90 ,temp, 110 );
TextOut(temp- 5 , 115 ,IntToStr(i));
for var i:= 1 to 3 do
var temp:= 100 -i*m;
Line( 25 ,temp, 35 ,temp);
TextOut( 15 ,temp- 8 ,IntToStr(i));
for var i:= 30 to 12 *m+ 30 do
SetPixel(i,Round(-m*rY+ 100 ),clRed);
В пунктах b и c код программы остаётся тот же, за исключением 32-ой строчки:
b) rY:= 1.3 *Power(rX, 1 / 3 );
c) rY:= 1.3 *Sin(rX)+ 1.5 ;
const m= 2 ; //Массштаб
X0= 10 ;Y0= 10 ; //Начало координат
var tp: record //Текущая позиция дл процедуры LineFT
x,y: integer ; end ;
//Line From tp To x,y
//Рисует линию от текущей позиции в точку (x,y),
//которая задаётся относитльно текущей позици
procedure LineFT(x,y: integer );
//Рисуем основной контур толстыми линиями
tp.x:= 118 *m+X0+ 10 ; tp.y:=Y0;
Источник: www.dvkuklin.ru