Графика в Паскаль
С помощью графики в Паскаль можно рисовать фигуры и изображения, визуализировать математические вычисления и использовать элементы графики в компьютерных играх. Мы познакомимся как задавать графический режим в паскаль, рисовать точки, окружности, линии, выводить текст в графическом режиме паскаль.
Для того, чтобы рисовать графические фигуры в Паскаль нужно импортировать модуль 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.
Полезно почитать по теме графика в паскаль
Pascal — Простой Paint на клавишах
Делаю простую рисовалку на Pascal. Нужно сделать режим рисования(сделан), режим ластика (сделан), и режим просто перемещения кисти без рисования (не могу). Подскажите, как это можно сделать?
uses graphabc,crt,events; var x,y:integer; c:char; drawmode: string; const WH = 600; WW = 600; color_px = clBlack; procedure draw_px(col:integer); begin SetPenColor(col); SetBrushColor(col); rectangle(x,y,x+10,y+10) end; procedure kDown(key: integer); < . . . . >begin if drawmode = 'no' then draw_px(clWhite); if key=VK_Left then x:=x-10; < . >if key=VK_Right then x:=x+10; < . >if key=VK_Up then y:=y-10; < . >if key=VK_Down then y:=y+10; < . >if key=VK_Escape then CloseWindow; < . . >if key=VK_Space then begin if drawmode = 'yes' then drawmode:='no' else if drawmode = 'no' then drawmode:='yes'; end; SetWindowCaption('x='+IntToStr(x)+' y='+IntToStr(y) + ' flag=' + drawmode); draw_px(clBlack); end; begin setWindowSize(WH,WW); x := WW div 2; y := WH div 2; drawmode:= 'yes'; OnKeyDown:=kDown; end.
Отслеживать
задан 28 сен 2018 в 12:59
Сергей Шиханов Сергей Шиханов
Режим ластика мой изначально задумывался как режим передвижения, но так и не смог понять, как сделать, чтобы он не закрашивал белым уже покрашенное.
28 сен 2018 в 13:02
Ну это же. точно так же, как рисование, только без рисования.
28 сен 2018 в 13:02
Для начала, наверное, стоит сделать три режима?
28 сен 2018 в 13:04
Какие именно? не понимаю вас
28 сен 2018 в 13:05
Как? точно так же, как рисование, только без рисования Без рисования — значит рисовать цветом фона. А когда рисуется цветом фона, то закрашивается
28 сен 2018 в 13:06
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
lang-pascal
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8420
Pascal: Занятие № 4 часть II. Графика в Паскале
Для работы с графикой в pascal abc используется модуль GraphABC. Для его подключения используется следующий код:
uses GraphABC; begin . end.
uses GraphABC; begin . end.
Система координат в Паскале соответствует экранной системе координат и выглядит следующим образом:
Управление цветом
Для того, чтобы использовать цвет, необходимо применить этот цвет к инструменту перо:
- SetPenColor(color) — устанавливает цвет пера, задаваемый параметром color;
- setBrushColor(color) — устанавливает цвет кисти, задаваемый параметром color;
- либо для палитры RGB: SetPenColor(rgb(0-255, 0-255, 0-255));
или использовать для заливки:
После чего можно использовать процедуры для рисования геометрических фигур.
Цвета в pascal abc:
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Точки, отрезки и ломаные
Для отображения точки в паскале используется процедура:
uses GraphABC; begin SetPixel(300,200,clred); end.
uses GraphABC; begin SetPixel(300,200,clred); end.
Для рисования линии используется:
uses GraphABC; begin SetPenColor(clgreen); line(100,50,500,250); end.
uses GraphABC; begin SetPenColor(clgreen); line(100,50,500,250); end.
Ломаные можно рисовать с помощью процедур MoveTo (x1, y1) и LineTo (x2, y2) .
Процедуры работают в паре: MoveTo передвигает курсор в определенную точку, а процедура LineTo рисует линию с этой точки до точки, определенной параметром данной процедуры.
uses GraphABC; begin . SetPenColor(clblue); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5); end.
uses GraphABC; begin . SetPenColor(clblue); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5); end.
Задание 0: При помощи операторов SetPenColor(), LineTo (x2, y2) и MoveTo (x1, y1) нарисовать квадрат и равносторонний треугольник.
[Название файла: L4_2task0.pas ]
Для установки размеров графического окна используется процедура
SetWindowWidth(600); SetWindowHeight(400);
Рисование фигур
Прямоугольник в Паскале рисуется:
uses GraphABC; begin Rectangle(50,50,200,200); end.
uses GraphABC; begin Rectangle(50,50,200,200); end.
Фигуры с заливкой:
uses GraphABC; begin Rectangle(50,50,200,200); FloodFill(100,100,clBlue); end.
uses GraphABC; begin Rectangle(50,50,200,200); FloodFill(100,100,clBlue); end.
Треугольник рисуется процедурами:
Line(x1,y1,x2,y2);
LineTo(x,y);
uses GraphABC; begin setpenwidth(20); setpencolor(clred); moveTo(300,100); lineTo(500,300); lineto(100,300); lineto(300,100); floodfill(300,200,clgreen); end.
uses GraphABC; begin setpenwidth(20); setpencolor(clred); moveTo(300,100); lineTo(500,300); lineto(100,300); lineto(300,100); floodfill(300,200,clgreen); end.
Окружность можно нарисовать с помощью процедуры:
uses GraphABC; begin Circle(500,200,100); FloodFill(500,200,clred); end.
uses GraphABC; begin Circle(500,200,100); FloodFill(500,200,clred); end.
Дуга окружности
1 2 3 4 5
uses GraphABC; Begin SetPenWidth(10); Arc(300,250,150,45,135); end.
uses GraphABC; Begin SetPenWidth(10); Arc(300,250,150,45,135); end.
Задание 1: «Лягушка»
[Название файла: L4_2task1.pas ]
Задание 2: «Корона»
[Название файла: L4_2task2.pas ]
Функция random для использования окраски
Задание 3: Нарисовать горизонтальный ряд окружностей радиусом 10 на расстоянии 100 от верхнего края экрана и с такими горизонтальными координатами 50, 80, 110, 140, … , 290.
* раскрасить круги случайным цветом
[Название файла: L4_2task3.pas ]
Задание 4: «Круги на воде».
Нарисуйте пару десятков концентрических окружностей, то есть окружностей разного радиуса, но имеющих общий центр.
[Название файла: L4_2task4.pas ]
Задание 5:
Воспроизвести изображение при помощи программы:
[Название файла: L4_2task5.pas ]
Штриховка
Нарисовать штриховку на Паскале можно, используя процедуры рисования прямоугольника и линии:
Программа будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
uses graphABC; var i, x1, x2, y1, y2, N: integer; h, x: real; begin x1 := 100; y1 := 100; x2 := 300; y2 := 200; N := 10; Rectangle (x1, y1, x2, y2); h := (x2 - x1) / (N + 1); x := x1 + h; for i:=1 to N do begin Line(round(x), y1, round(x), y2); x := x + h; end; end.
uses graphABC; var i, x1, x2, y1, y2, N: integer; h, x: real; begin x1 := 100; y1 := 100; x2 := 300; y2 := 200; N := 10; Rectangle (x1, y1, x2, y2); h := (x2 — x1) / (N + 1); x := x1 + h; for i:=1 to N do begin Line(round(x), y1, round(x), y2); x := x + h; end; end.
Задание 6:
Нарисуйте шахматную доску.
[Название файла: L4_2task6.pas ]
Анимация в Паскале
Анимация в программировании заключается в том, что сначала рисуется фигура цветным инструментом, затем с тем же координатами рисуется та же фигура белым цветом. После чего происходит сдвиг фигуры и действия повторяются.
Пример: Воспроизвести движение круга по горизонтали.
1 2 3 4 5 6 7 8 9 10 11 12
uses GraphABC; var x:integer; begin x:=40; repeat SetPenColor(clWhite); Circle(x,100,10); SetPenColor(clBlack); Circle(x,100,10); x:=x+1 until x>600; end.
uses GraphABC; var x:integer; begin x:=40; repeat SetPenColor(clWhite); Circle(x,100,10); SetPenColor(clBlack); Circle(x,100,10); x:=x+1 until x>600; end.
Задание 7: Выполнить анимацию движения квадрата по следующей траектории:
[Название файла: L4_2task7.pas ]
Графика в Паскале: создание рисунка программой на Pascal
Графика в программировании — это не только красивые картинки. Это мощный инструмент для визуализации данных, создания интерфейсов, имитационного моделирования. Давайте разберемся, как с нуля нарисовать в Паскале графический объект и дать ему «жизнь».
Введение в графику Паскаля
Паскаль изначально создавался как язык для обучения программированию. Поэтому в нем изначально не было встроенных средств для работы с графикой. Но со временем появлялись расширения, которые добавляли графические возможности.
Графический экран PascalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. Начало отсчета – левый верхний угол экрана. Ось x направлена вправо, а ось y –вниз. Координаты исчисляются в пикселях.
Основные графические библиотеки Паскаля:
- GraphABC — встроенная библиотека в PascalABC
- Graphics — стандартная библиотека в Object Pascal
- SDL — кроссплатформенная библиотека для игр и мультимедиа
Для подключения GraphABC достаточно добавить строку:
Uses GraphABC;
После этого можно использовать все графические функции, например процедуру рисования точки:
PutPixel(x, y, color);
Где x и y — координаты точки, а color — ее цвет. Цвет задается числом.
Базовые фигуры и операции
Рисунок в паскале поддерживает рисование разных геометрических фигур. Начнем с простейшей — точки. Ее координаты задаются числами, например так:
PutPixel(10, 20, Red);
Нарисует красную точку в позиции x=10, y=20. Пиксель это маленький квадрат, поэтому точка на самом деле будет иметь небольшой размер.
Для рисования линии используется процедура Line . Ей нужно передать координаты начала, конца и цвет:
Line(10, 10, 50, 30);
Получится линия диагонально из левого верхнего угла в правый нижний. Так можно нарисовать ломаные, многоугольники, замкнутые фигуры.
Для окружностей и эллипсов есть Ellipse . Кругов — частный случай, когда высота и ширина одинаковые:
Ellipse(x, y, r, r);
Где r — радиус. А для прямоугольника используется Rectangle . Ему нужны координаты двух противополжных углов:
Rectangle(10, 10, 100, 50);
Такой код нарисует прямоугольник шириной 90 пикселей (100-10) и высотой 40 пикселей (50-10).
Для заливки фигур цветом служит процедура FloodFill . Она закрашивает всю область, ограниченную цветом контура:
Rectangle(10, 10, 100, 50); FloodFill(15, 15, Green);
В приведенном примере внутренняя область прямоугольника закрасится зеленым цветом.
Динамика и взаимодействие
Нарисованные фигуры в Паскале можно не только статично отображать на экране. Их можно перемещать, масштабировать, запускать анимацию.
Например, для плавного движения шара по экрану можно использовать цикл. В нем будем немного смещать координаты центра и перерисовывать круг:
var x, y: integer; begin x := 0; y := 0; while x < 300 do begin Ellipse(x, y, 10, 10); x := x + 1; end; end.
То же самое можно применить для любых других фигур. Главное помнить, что предыдущий вариант надо стереть вызовом Rectangle или Ellipse с заливкой белым цветом.
Реакция на события мыши
Рисунок в паскале abc позволяет отслеживать положение и нажатия кнопок мыши. Это открывает возможности для создания интерактивных интерфейсов.
Например, можно реализовать перетаскивание объектов. Создаем фигуру с координатами в переменных. В цикле проверяем, нажата ли кнопка мыши и обновляем координаты:
var x, y: integer; begin x := 100; y := 100; while true do begin if MouseButton = 1 then begin x := MouseX; y := MouseY; end; Ellipse(x, y, 10, 10); end; end.
В данном примере круг будет следовать за курсором пока зажата левая кнопка мыши. Так же можно реагировать на наведение и клики для создания кнопок и элементов управления.
Рисование по алгоритму
Программа рисунка паскале может не только пассивно отображать заранее заданные фигуры. Ее можно использовать для автоматической генерации изображений по заданным алгоритмам.
Фрактальные фигуры
Один из примеров - фракталы. Это самоподобные геометрические структуры, которые при увеличении повторяют свой вид. Их можно строить рекурсивно.
Например, популярный фрактал под названием "Ковер Серпинского" строится следующим алгоритмом:
- Берется большой квадрат и делится на 9 равных частей
- Удаляется центральная часть
- Для каждого из 8 оставшихся квадратов рекурсивно повторяются шаги 1 и 2
Реализовав этот алгоритм в рисунок на Паскале, можно получить эффектный рисунок, построенный программой за считанные секунды.
Генерация лабиринтов
Еще один интересный пример автоматического рисования - генератор лабиринтов. Существует множество алгоритмов для их построения.
Например, один из простейших методов работает так:
- Строится сетка квадратов
- В случайном порядке убираются стены между соседними ячейками
- Удаляются недостижимые ячейки
Реализовав этот алгоритм на Паскале, можно порадовать друзей случайным лабиринтом за секунды.
Интерфейсы на основе графики
Графические способности abc Паскаля позволяют создавать не только абстрактные картинки. Их можно использовать для построения полноценных программ с графическим интерфейсом.
Элементы управления
С помощью графических примитивов можно реализовать различные элементы управления и меню:
- Кнопки - реагируют на клик мыши
- Поля ввода - рисуются поверх текста от пользователя
- Флажки и переключатели - меняют свое состояние
Это позволяет создавать интерактивные приложения, недоступные в классическом текстовом Паскале.
Диаграммы и графики
Программа рисунка в Паскале хорошо подходит для визуализации данных с помощью диаграмм и графиков. Их можно строить как в абсолютных координатах, так и относительно границ окна программы.
Это позволяет создавать различные мониторы, осциллографы, самописцы в реальном времени.