Важна ли графика для начинающих программистов? Или следует в первую очередь изучать конструкции языка, алгоритмы, методику написания программ? А графика — баловство?
Несомненно, все зависит от аудитории. Если программированию обучается школьник, то графика очень важна — мышление конкретное, и хочется сразу видеть результаты своего труда. Абстрактное мышление быстро утомляет. Если программировать учится студент — здесь другая картина.
Графика нужна по большей мере как вспомогательное средство для визуализации результатов, динамики выполнения алгоритмов. Но что однозначно — графика нужна.
Меня вот часто спрашивают студенты — как сделать что-нибудь графическое на C++? Много лет уже спрашивают. Уже устал отвечать — не знаю.
Конечно, не каждый язык должен иметь стандартную поддержку графики. Даже универсальный. Но вот от языка для обучения (а язык Паскаль используется в основном для обучения) поддержку графики — ждут.
В старом добром Бейсике — чем он подкупал — на Корветах там всяких, Атари и Синклерах — загрузил среду, написал
Как нарисовать домик в PascalABC.NET ?
На старом добром Turbo Pascal был такой замечательный модуль Graph — подключил его, написал пару строчек непонятных заклинаний — и рисуй себе все что угодно аж 256 цветами! Вот эти заклинания:
Еще в конце там CloseGraph надо было вызвать. И знатоки с умным видом рассказывали новичкам, что у тебя там неправильно установлен путь к графическому драйверу или драйвер у тебя не тот.
Вообщем, прошли те времена — появилась Windows, а в ней основной режим — графический.
Прошли ли? Меня до сих пор спрашивают, почему в PascalABC нет модуля Graph? Отвечаю, что не мог больше терпеть. Но нет-нет да мелькнет в Интернете на форуме пост какого-нибудь новичка — представляете, настолько плохой PascalABC, что даже графики в нем нет или она там какая-то своя! Не та, что описана в груде книжек по Турбо-Паскалю, а другая!
Вот об этой другой графике мы и поговорим.
Те, кто программировал графические приложения под Windows, знают, что рисовать лучше всего в обработчике события WM_PAINT или OnPaint (последнее — если используется какой-нибудь объектный каркас для Windows-приложения). В этом обработчике нельзя рисовать долго, поскольку программа на время его работы блокируется. А если рисовать в других обработчиках, то нарисованное стирается при следующей перерисовке окна. Короче — куча проблем!
Идея была простой: создать графическую библиотеку, подключающуюся крайне просто, где эти проблемы были бы решены. Еще лучше, если графическое приложение будет похоже на обычную программу: чтобы сразу после begin можно было писать графические команды.
Решение было найдено — вот эта простейшая программа:
При запуске такой программы возникает специальное графическое окно, и все рисование происходит именно на нем. Изображение на нем не пропадет при перерисовке, и можно рисовать сколь угодно долго — программа не окажется заблокированной на время рисования. Это значит, в частности, что можно легко делать простую анимацию.
Рисуем в среде программирования Pascal
Вот несколько очень простых графических программок — совершенно бесполезны — чистое баловство!
Читать еще: Финансовая безопасность отрасли
Программа 1. Показывает использование процедуры SetPixel и функции RGB.
Программа 2. Рисование звездочки. Показывает использование процедур MoveTo и LineTo, а также полярных координат.
Пример 3. Цифровые часы. Показывает использование процедуры TextOut, а также функций TextWidth, TextHeight.
Ну вот, для введения и достаточно.
А симпатичные примеры на графику строк эдак на 10-15 — пожалуйста — пишите в комментариях!
Работа с графикой в PascalABC

После запуска PascalABC, по умолчанию, запускается текстовый режим. Для работы с графикой служит отдельное графическое окно.
Чтобы его открыть, необходимо подключить модуль GraphABC. В этом модуле содержится набор процедур и функций, предназначенных для работы с графическим экраном, а также некоторые встроенные константы и переменные, которые могут быть использованы в программах с графикой.
С их помощью можно создавать разнообразные графические изображения и сопровождать их текстовыми надписями.
Подключение осуществляется в разделе описаний.
Формат подключения модуля GraphABC:Uses GraphABC;
Графический экран PascalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. Начало отсчета – левый верхний угол экрана. Ось x направлена вправо, а ось y –вниз. Координаты исчисляются в пикселях.
Все команды библиотеки GraphABC являются подпрограммами и описаны в виде процедур и функций. Для того, что бы команда выполнилась необходимо указать команду и задать значения параметров.
Управление графическим окном

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

Процедуры, используемые для работы с цветом

Процедуры для работы с текстом

Цвета в PascalABC

Пример графической программы, рисующей изображение дома:

Рисунок в PascalABC
Программа, рисующая фигурку:

Практическая работа за компьютером
Задание 1. Определите координаты и составьте программу, выводящую на экран рисунк дома и дерева.

Программа будет иметь вид:
Задание 2. Используя оператор цикла и введя переменную для пересчета координат по оси x, постройте «поселок», состоящий из 5 домов. Внесите соответствующие дополнения и изменения в предыдущую программу.

Весь наш «поселок» выстроился вдоль горизонтальной оси экрана — оси X. Построение рисунка начинается с левого верхнего угла стены первого дома — точки с координатами (100, 50). Координата Y не изменяется. Чтобы начать рисовать второй домик, нужно координату X увеличить на 150 (50 точек — ширина первого дома и 100 точек — расстояние между домиками).
Выберем в качестве параметра цикла целочисленную переменную X.
Для всех элементов нашего рисунка абсолютное значение координаты X заменим на относительное. Например, для стены дома процедура для рисования запишется следующим образом:
Сформулируем условие выполнения цыклических действий для нашей задачи.Какие координаты имеет левый верхний угол пятого дома? Конечное значение выбранного нами параметра цикла x = 700. Тогда условие выполнения цикла записывается так: x
Графика в Pascal
В этом разделе сайта progmatem.ru для рисования различных геометрических фигур в Паскале нам нам понадобится среда PascalABC.Net или PascalABC. Будут также привены рабочие программы в средах Turbo Pascal и Free Pascal. Вообще Паскаль хорош тем, что позволяет не только писать простые и/или сложные консольные приложения, но и работать с формами (как в Delphi), а также создавать графические приложения с помощью подключаемого модуля GraphABC (аналог модуля graph в Turbo Pascal, Free Pascal). Ведь для того и создавалась среда PascalABC.Net – как учебное пособие при переходе на Delphi – более совершенную версию Object Pascal.
Читать еще: Что создал паскаль
При работе с графическим окном нужно учитывать две особенности. Во-первых, начало координат – точка (0, 0) – находится не где-то посредине окна, а в левом верхнем углу. Вторая особенность связана с первой: положительное направление оси OY показывает не вверх, а вниз (OX направлена вправо).
Как мы видим, система координат в графическом окне Pascal отлична от той, к которой мы привыкли в математике – т.н. правой системе координат, в которой ось OX направлена вправо, ось OY – вверх, а начало координат, как правило, всегда стоит где-то посредине окна. И к этой особенности надо привыкать.

Но что делать, если требуется нарисовать геометрическую фигуру или график функции в «нормальной», привычной для нас системе координат? Надо выполнить преобразование системы координат таким образом, чтобы точка (0, 0) находилась посредине окна (в любой нужной точке), а ось OY была направлена вверх. Стандартное преобразование в прямоугольной правой системе координат выглядит следующим образом:

Здесь x и y – координаты точки, в которую мы хотим перенести начало координат новой системы, x и y – координаты точки в старой системе, x1 и y1 – координаты точки в новой системе. Но поскольку ось OY в графическом окне Паскаля направлена вниз, то для её разворота вверх нужно, естественно, знак координаты y поменять на противоположный (вместо y поставить -y ). Таким образом, окончательно получим преобразование координат в графическом окне PascalABC.Net:

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

Как мы видим, здесь начало координат перемещено в центр графического окна, а ось OY направлена вверх. В результате этого стали доступны не только положительные координаты, но также отрицательные.
Напишем простую программу, демонстрирующую все вышесказанное. Для этого, забегая наперед, укажем три полезные в графическом режиме PascalABC.Net процедуры:
TextOut(x,y,s) – Вывод текста в графическое окно. При этом текст (строка s) записывается в прямоугольную область таким образом, что точка с координатами (x, y) находится в левом верхнем углу первой буквы;
Line(x1,y1,x2,y2) – Проводит отрезок от точки (x1, y1) до точки (x2, y2);
Circle(x,y,r) – Рисует окружность с центром (x, y) и радиусом r.
Программа рисует окружность относительно графического окна (x = 0, y = 0), а через 3 секунды эта окружность появляется относительно нарисованной в центре системы координат. Перепишите эту программу в среду PascalABC.Net и запустите. Вот, собственно, сам код:
Здесь необходимо сделать некоторые пояснения:
WindowWidth — ширина графического окна;
WindowHeight — высота графического окна (в пикселях);
ClearWindow — эта процедура очищает окно белым цветом;
sleep(ms) — задержка (пауза) на ms миллисекунд.
На следующей странице мы рассмотрим самое элементарное понятие в графике Паскаля – точки и пиксели, а также укажем полезные процедуры для работы с ними.
лабы по информатике, егэ
лабораторные работы и задачи по программированию и информатике, егэ по информатике


Pascal: Занятие № 4 часть II. Графика в Паскале
Графика в Паскале
Для работы с графикой в pascal abc используется модуль GraphABC. Для его подключения используется следующий код:
Читать еще: Сортировка обменом паскаль
uses GraphABC; begin . end.
Система координат в Паскале соответствует экранной системе координат и выглядит следующим образом:

Управление цветом
Для того, чтобы использовать цвет, необходимо применить этот цвет к инструменту перо:
- SetPenColor(color) — устанавливает цвет пера, задаваемый параметром color;
- setBrushColor(color) — устанавливает цвет кисти, задаваемый параметром color;
- либо для палитры RGB: SetPenColor(rgb(0-255, 0-255, 0-255));
После чего можно использовать процедуры для рисования геометрических фигур.
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Точки, отрезки и ломаные
Для отображения точки в паскале используется процедура:
SetPixel(x,y,color) — Закрашивает один пиксел с координатами (x,y) цветом color
uses GraphABC; begin SetPixel(300,200,clred); end.
Для рисования линии используется:
Line(x1,y1,x2,y2) — рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2)
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.
Для установки размеров графического окна используется процедура
SetWindowSize(ширина, высота)
Рисование фигур
uses GraphABC; begin Rectangle(50,50,200,200); 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 Circle(500,200,100); FloodFill(500,200,clred); end.
uses GraphABC; Begin SetPenWidth(10); Arc(300,250,150,45,135); end.
Функция random для использования окраски
* раскрасить круги случайным цветом

Нарисовать штриховку на Паскале можно, используя процедуры рисования прямоугольника и линии:
Программа будет выглядеть следующим образом:

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 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.
Источник: fruitsekta.ru
Графические примитивы
SetPixel(x,y,color) – закрашивает один пиксел с координатами (x,y) цветом color ;
GetPixel(x,y) – возвращает текущее значение цвета для пиксела с координатами (x,y) ;
Line(x1,y1,x2,y2) – рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2) ;
Rectangle(x1,y1,x2,y2) – рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) ;
Ellipse(x1,y1,x2,y2) – рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2) ;
RoundRect(x1,y1,x2,y2,w,h) – рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев;
Circle(x,y,r) – рисует окружность с центром в точке (x,y) и радиусом r ;
Arc(x,y,r,a1,a2) – рисует дугу окружности с центром в точке (x,y) и радиусом r , заключенной между двумя лучами, образующими углы a1 и a2 с осью OX ( a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки);
Pie(x,y,r,a1,a2) – рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc );
Chord(x,y,r,a1,a2) – рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc );
MoveTo(x,y) – передвигает невидимое перо к точке с координатами (x,y) ; эта функция работает в паре с функцией LineTo(x,y) ;
LineTo(x,y) – рисует отрезок от текущего положения пера до точки (x,y) ; координаты пера при этом также становятся равными (x,y) ;
TextOut(x,y,s) – выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s );
FloodFill(x,y,c) – заливает область одного цвета цветом c , начиная с точки (x,y) ;
FillRect(x1,y1,x2,y2) – заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) , цветом текущей кисти;
Polygon(a,n) – строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа TPoint ;
Polyline(a,n) – строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа TPoint .
Функции для работы с цветом
RGB(r,g,b) – возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r , g и b соответственно ( r , g и b – целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 – максимальной). GetRed(color) – выделяет красную составляющую из цвета color (целое в диапазоне от 0 до 255);
GetGreen(color) – выделяет зеленую составляющую из цвета color (целое в диапазоне от 0 до 255);
GetBlue(color) – выделяет синюю составляющую из цвета color (целое в диапазоне от 0 до 255).
Стандартные цвета
| clBlack – черный clPurple – фиолетовый clWhite – белый clMaroon – темно-красный clRed – красный clNavy – темно-синий clGreen – зеленый clBrown – коричневый clBlue – синий clSkyBlue – голубой clYellow – желтый |
clCream – кремовый clAqua – бирюзовый clOlive – оливковый clFuchsia – сиреневый clTeal – сине-зеленый clGray – серый clLime – ярко-зеленый clLightGray – светло-серый clMoneyGreen – цвет зеленых денег clDarkGray – темно-серый |
Действия с пером
PenX , PenY – возвращают текущие координаты пера;
SetPenColor(color) – устанавливает цвет пера, задаваемый параметром color ;
PenColor – возвращает текущий цвет пера;
SetPenWidth(w) – устанавливает ширину пера, равную w пикселам;
PenWidth – возвращает текущую ширину пера;
SetPenStyle(ps) – устанавливает стиль пера, задаваемый параметром ps ;
PenStyle – возвращает текущий стиль пера;
Стили пера задаются следующими именованными константами:
| psSolid | Сплошная линия |
| psClear | Нет линии |
| psDash | Пунктирная линия |
| psDot | Мелкий пунктир |
| psDashDot | «Точка — тире» |
| psDashDotDot | «Две точки — тире» |
SetPenMode(m) – устанавливает режим пера, задаваемый параметром m ;
PenMode – возвращает текущий режим пера. Режим пера определяет, как цвет пера взаимодействует с цветом поверхности.
Режимы пера задаются следующими именованными константами:
pmCopy – обычный режим; при рисовании цвет поверхности заменяется цветом пера;
pmNot – режим инвертирования; при рисовании цвет поверхности инвертируется (становится негативным), а цвет пера при этом игнорируется.
Действия с кистью
SetBrushColor(color) – устанавливает цвет кисти, задаваемый параметром color ; BrushColor – возвращает текущий цвет кисти;
SetBrushPicture(fname) – устанавливает в качестве образца для закраски кистью образец, хранящийся в файле fname , при этом текущий цвет кисти при закраске игнорируется;
ClearBrushPicture – очищает рисунок-образец, выбранный для кисти;
SetBrushStyle(bs) – устанавливает стиль кисти, задаваемый параметром bs ;
BrushStyle – возвращает текущий стиль кисти.
Стили кисти задаются следующими именованными константами:
| bsSolid | Сплошая заливка | bsCross | В клеточку |
| bsClear | Нет заливки | bsDiagCross | Диагональная клеточка |
| bsHorizontal | Горихонтальная штриховка | bsBDiagonal | Диагональная штриховка |
| bsVertical | Вертикальная штриховка | bsFDiagonal | Диагональная штриховка |
Действия со шрифтом
SetFontColor(color) – устанавливает цвет шрифта;
FontColor – возвращает текущий цвет шрифта;
SetFontSize(sz) – устанавливает размер шрифта в пунктах;
FontSize – возвращает текущий размер шрифта в пунктах;
SetFontName(s) – устанавливает наименование шрифта;
FontName – возвращает текущее наименование шрифта;
По умолчанию установлен шрифт, имеющий наименование MS Sans Serif .
Наиболее распространенные шрифты – это Times New Roman , Arial и Courier New .
Наименование шрифта можно набирать без учета регистра.
SetFontStyle(fs) – устанавливает стиль шрифта;
FontStyle – возвращает текущий стиль шрифта;
Стили шрифта задаются следующими именованными константами:
fsNormal – обычный;
fsBold – жирный;
fsItalic – наклонный;
fsBoldItalic – жирный наклонный;
fsUnderline – подчеркнутый;
fsBoldUnderline – жирный подчеркнутый;
fsItalicUnderline – наклонный подчеркнутый;
fsBoldItalicUnderline – жирный наклонный подчеркнутый.
TextWidth(s) – возвращает ширину сроки s в пикселях при текущих настройках шрифта;
TextHeight(s) – возвращает высоту сроки s в пикселях при текущих настройках шрифта
Действия с графическим окном
ClearWindow – очищает графическое окно кистью белого цвета;
WindowWidth – возвращает ширину графического окна;
WindowHeight – возвращает высоту графического окна;
WindowLeft – возвращает отступ графического окна от левого края экрана;
WindowTop – возвращает отступ графического окна от верхнего края экрана;
WindowCaption – возвращает заголовок графического окна;
SetWindowWidth(w) – устанавливает ширину графического окна;
SetWindowHeight(h) – устанавливает высоту графического окна;
SetWindowLeft(l) – устанавливает отступ графического окна от левого края экрана;
SetWindowTop(t) – устанавливает отступ графического окна от верхнего края экрана;
SetWindowSize(w,h) – устанавливает ширину и высоту графического окна;
SetWindowPos(l,t) – устанавливает отступ графического окна от левого и верхнего края экрана;
SetWindowCaption(s) – устанавливает заголовок графического окна;
SaveWindow(fname) – сохраняет содержимое графического окна в файл с именем fname ;
LoadWindow(fname) – выводит в графическое окно рисунок из файла с именем fname ;
CloseWindow – закрывает графическое окно.
Все размеры устанавливаются и возвращаются в пикселах.
Функция LoadWindow может загружать лишь файлы формата bmp .
Функция SaveWindow сохраняет рисунок в файле формата bmp с 256 цветами.
Действия с рисунками
Каждый рисунок имеет описатель (дескриптор), представляющий собой целое число. Это число возвращается функцией загрузки рисунка LoadPicture , а затем передается в качестве первого параметра во все остальные процедуры и функции работы с рисунками.
n:=LoadPicture(fname) – загружает рисунок из файла с именем fname в оперативную память и возвращает описатель рисунка в целую переменную n ; если файл не найден, то возникает ошибка времени выполнения;
DrawPicture(n,x,y) – выводит рисунок с описателем n в позицию (x,y) графического окна;
DestroyPicture(n) – удаляет рисунок с описателем n из оперативной памяти, описатель рисунка при этом становится недействительным ;
PictureWidth(n) – возвращает ширину рисунка с описателем n ;
PictureHeight(n) – возвращает высоту рисунка с описателем n ;
Источник: forinformatics.blogspot.com
Линиив Pascal: Line, LineTo, MoveTo
При работе с графическим окном нужно учитывать две особенности. Во-первых, начало координат – точка (0, 0) – находится не где-то посредине окна, а в левом верхнем углу. Вторая особенность связана с первой: положительное направление оси OY показывает не вверх, а вниз (OX направлена вправо).

Но что делать, если требуется нарисовать геометрическую фигуру или график функции в «нормальной», привычной для нас системе координат? Надо выполнить преобразование системы координат таким образом, чтобы точка (0, 0) находилась посредине окна (в любой нужной точке), а ось OY была направлена вверх. Стандартное преобразование в прямоугольной правой системе координат выглядит следующим образом:

Здесь x0 и y0 – координаты точки, в которую мы хотим перенести начало координат новой системы, x и y – координаты точки в старой системе, x1 и y1 – координаты точки в новой системе. Но поскольку ось OY в графическом окне Паскаля направлена вниз, то для её разворота вверх нужно, естественно, знак координаты y поменять на противоположный (вместо y поставить -y). Таким образом, окончательно получим преобразование координат в графическом окне PascalABC.Net:

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

Pдесь начало координат перемещено в центр графического окна, а ось OY направлена вверх. В результате этого стали доступны не только положительные координаты, но также отрицательные.
Напишем простую программу, демонстрирующую все вышесказанное. Для этого, забегая наперед, укажем три полезные в графическом режиме PascalABC.Net процедуры:
TextOut(x, y, s) – Вывод текста в графическое окно. При этом текст (строка s) записывается в прямоугольную область таким образом, что точка с координатами (x, y) находится в левом верхнем углу первой буквы;
Line(x1, y1, x2, y2) – Проводит отрезок от точки (x1, y1) до точки (x2, y2);
DrawCircle(x, y, r) – Рисует окружность с центром (x, y) и радиусом r.
Программа рисует окружность относительно графического окна (x0 = 0, y0 = 0), а через 3 секунды эта окружность появляется относительно нарисованной в центре системы координат. Перепишите эту программу в среду PascalABC.Net и запустите. Вот, собственно, сам код:
05.r = 90; //радиус окружности
08.x0, y0, x, y: integer;
12.x0 := WindowWidthdiv2; //половина ширины окна
13.y0 := WindowHeightdiv2; //половина высоты окна
14.x := 100; y := 100; //координаты центра окружности
15.Line(x0 — 250, y0, x0 + 250, y0); //ось OX
16.Line(x0, y0 — 200, x0, y0 + 200); //ось OY
17.Circle(x, y, r); //окружность с центром (x, y) и радиусом r
18.Circle(x, y, 2); //центр окружности (маленькая окружность)
19.TextOut(x + 5, y, ‘(100, 100)’);//надпись возле центра окружности
20.sleep(3000); //делаем паузу на 3 секунды
21.ClearWindow; //очищаем графическое окно белым цветом
22.Line(x0 — 250, y0, x0 + 250, y0); //ось OX
23.Line(x0, y0 — 200, x0, y0 + 200); //ось OY
30.TextOut(x + 5, y, ‘(100, 100)’);
Здесь необходимо сделать некоторые пояснения:
WindowWidth — ширина графического окна;
WindowHeight — высота графического окна (в пикселях);
ClearWindow — эта процедура очищает окно белым цветом;
sleep(ms) — задержка (пауза) на ms миллисекунд.
Графики функций в паскале
Для построения системы координат нам необходимо знать, в каких границах графического окна она будет находиться. Можно было бы опустить этот этап и строить декартову систему так, чтобы она занимала все графическое окно. Но это не очень удобно и просто некрасиво выглядит, когда график функции занимает всю область, не имея свободных полей слева-справа и сверху-снизу. Поэтому, чтобы задать прямоугольник, в котором будет находиться система координат, достаточно знать координаты левого верхнего и правого нижнего его углов.

Пусть (xLeft; yLeft) – координаты левого верхнего угла декартовой системы координат в графическом окне PascalABC.Net, (xRight; yRight) – соответственно координаты правого нижнего угла. Следующая задача – провести оси координат OX и OY. Будем считать, что нам нужны все четыре четверти координат. В этом случае обе оси будут иметь положительные и отрицательные значения. Чтобы правильно поставить центр координат (x0; y0), необходимо знать границы изменения аргумента x по оси OX и значения функции f по оси OY.
Итак, отложим по оси ОХ числа от a до b с интервалом dx, по оси OY – числа от fmin до fmax с разницей dy; причем обязательные условия: a≤0, b≥0, fmin≤0, fmax≥0. Для правильного отображения засечек на осях необходимо также, чтобы dx было делителем a и b, а dy было делителем fmin и fmax, и эти числа придется выбирать самостоятельно для каждого интервала. Но сначала нам придется познакомиться с таким понятиемкак масштаб системы координат в графическом окне паскаля.
Что такое масштаб? Масштаб – это величина, или коэффициент, показывающий, сколько пикселей графического окна паскаля приходится на единицу в той или иной оси системы координат. Например, по оси ОХ нужно расположить числа от -4 до 16 (всего 20 единиц), а ширина графического окна паскаля равна 1000 пикселей; тогда на единицу величины оси ОХ приходится 1000_20=50 пикселей/единицу. Это и есть масштаб по оси ОХ. Чтобы узнать, сколько пикселей содержат n единиц, надо просто умножить n на 50.

График функции будем строить по точкам, используя процедуру SetPixel(x, y, c), где x, y — координаты точки в графическом окне паскаля, c — цвет точки. Для рисования осей координат ОХ и OY воспользуемся процедурой Line(x1, y1, x2, y2), где (x1; y1) — координаты начальной точки, (x2; y2) — координаты конечной. Последовательность такова: сначала строим систему координат, а после (в самом конце) вычисляем значения функции, вычисляем соответствующие координаты точки в графическом окне и ставим точку (x, y), закрашенную в зеленый цвет. Откройте PascalABC или PascalABC.Net, скопируйте следующий код и запустите программу:
02.graphABC; //Подключаем графический модуль
05.W = 800; H = 500;//Размеры графического окна
07.functionF(x: real): real;
09.F := (x + 1) * (x — 2) * (x — 3); //Функция
13.x0, y0, x, y, xLeft, yLeft, xRight, yRight, n: integer;
14.a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real;
19.SetWindowSize(W, H); //Устанавливаем размеры графического окна
20.//Координаты левой верхней границы системы координат:
23.//Координаты правой нижней границы системы координат:
24.xRight := W — 50;
25.yRight := H — 50;
26.//интервал по Х; a и b должно нацело делится на dx:
27.a := -2; b := 6; dx := 0.5;
28.//Интервал по Y; fmin и fmax должно нацело делится на dy:
29.fmin := -10; fmax := 20; dy := 2;
31.mx := (xRight — xLeft) / (b — a); //масштаб по Х
32.my := (yRight — yLeft) / (fmax — fmin); //масштаб по Y
34.x0 := trunc(abs(a) * mx) + xLeft;
35.y0 := yRight — trunc(abs(fmin) * my);
37.line(xLeft, y0, xRight + 10, y0); //осьОХ
38.line(x0, yLeft — 10, x0, yRight); //осьОY
41.TextOut(xRight + 20, y0 — 15, ‘X’); //Подписываемось OX
42.TextOut(x0 — 10, yLeft — 30, ‘Y’); //Подписываемось OY
46.n := round((b — a) / dx) + 1; //количество засечек по ОХ
47.fori := 1ton do
49.num := a + (i — 1) * dx; //Координата на оси ОХ
50.x := xLeft + trunc(mx * (num — a)); //Координата num в окне
51.Line(x, y0 — 3, x, y0 + 3); //рисуем засечки на оси OX
53.ifabs(num) > 1E-15then//Исключаем 0 наоси OX
54.TextOut(x — TextWidth(s) div2, y0 + 10, s)
57.n := round((fmax — fmin) / dy) + 1; //количествозасечекпоОY
58.fori := 1ton do
60.num := fMin + (i — 1) * dy; //Координата на оси ОY
61.y := yRight — trunc(my * (num — fmin));
62.Line(x0 — 3, y, x0 + 3, y); //рисуем засечки на оси Oy
64.ifabs(num) > 1E-15then//Исключаем 0 наоси OY
65.TextOut(x0 + 7, y — TextHeight(s) div2, s)
67.TextOut(x0 — 10, y0 + 10, ‘0’); //Нулевая точка
69.x1 := a; //Начальное значение аргумента
72.y1 := F(x1); //Вычисляем значение функции
73.x := x0 + round(x1 * mx); //Координата Х в графическом окне
74.y := y0 — round(y1 * my); //Координата Y в графическом окне
75.//Если y попадает в границы [yLeft; yRight], то ставим точку:
77.x1 := x1 + 0.001//Увеличиваем абсциссу
Вы должны увидеть следующее:

А теперь программа для тех, у кого нет PascalABC, но есть TurboPascal или FreePascal. Итак, скопируйте нижеприведенный код в блокнот, сохраните в формате .pas и откройте в турбо паскале, потом запустите (ctrl+F9):
04.functionF(x: real): real;
06.F := (x + 1) * (x — 2) * (x — 3);
10.Gd, Gm, x0, y0, x, y, xLeft, yLeft, xRight, yRight, n: integer;
11.a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real;
17.InitGraph(Gd, Gm, ‘C:tp7bgi’);
22.xRight := GetMaxX — 50;
23.yRight := GetMaxY — 50;
25.a := -2; b := 6; dx := 0.5;
27.fmin := -10; fmax := 20; dy := 2;
29.mx := (xRight — xLeft) / (b — a);
30.my := (yRight — yLeft) / (fmax — fmin);
32.x0 := trunc(abs(a) * mx) + xLeft;
33.y0 := yRight — trunc(abs(fmin) * my);
35.line(xLeft, y0, xRight + 10, y0);
36.line(x0, yLeft — 10, x0, yRight);
38.SetTextStyle(1, 0, 1);
39.OutTextXY(xRight + 20, y0 — 15, ‘X’);
40.OutTextXY(x0 — 15, yLeft — 35, ‘Y’);
43.n := round((b — a) / dx) + 1;
44.fori := 1ton do
46.num := a + (i — 1) * dx;
47.x := xLeft + trunc(mx * (num — a));
48.Line(x, y0 — 3, x, y0 + 3);
51.OutTextXY(x — TextWidth(s) div2, y0 + 10, s)
54.n := round((fmax — fmin) / dy) + 1;
55.fori := 1ton do
57.num := fMin + (i — 1) * dy;
58.y := yRight — trunc(my * (num — fmin));
59.Line(x0 — 3, y, x0 + 3, y);
62.OutTextXY(x0 + 7, y — TextHeight(s) div2, s)
64.OutTextXY(x0 — 10, y0 + 10, ‘0’);
70.x := x0 + round(x1 * mx);
71.y := y0 — round(y1 * my);
77.OutTextXY(GetMaxX div2- 50, 50, ‘y = (x+1)(x-2)(x-3)’);
Если все сделано правильно, вы должны увидеть такой график функции:

Линиив Pascal: Line, LineTo, MoveTo
На предыдущих страницах мы говорили об точках в Паскале: изучили процедуры GetPixel (определить цвет данного пикселя) и PutPixel, SetPixel (задать данному пикселю определенный цвет – там мы строили линии и не только с помощью точек). Здесь рассмотрим одни из наиболее важных процедур в графике Паскаля – построение линий Line, LineTo и вспомогательная для последней MoveTo.
Так чем же отличаются Line и LineTo, и зачем нужна загадочная MoveTo?
✎Line(x1, y1, x2, y2) – Эта процедура соединяет отрезком точки (x1, y1) и (x2, y2).
Теперь немного разукрасим отрезок и увеличим его толщину, так как в предыдущем примере по умолчанию цвет черный, а толщина линии 1 пиксель:
Ниже представлены примеры программ случайных появляющихся отрезков:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | uses GraphABC; //Модуль для рисования в графическом окне begin SetWindowCaption(‘Случайные отрезки’); var W := WindowWidth; //Ширина графического окна var H := WindowHeight; //Высота графического окна randomize; < Следующий цикл будет бесконечным, поскольку условие True в цикле While всегда истинно: >while true dobegin var n := random(5, 50); //количествоотрезковот 5 до 50 forvari := 1 to ndobegin SetPenWidth(random(1, 10)); //толщинаотрезков SetPenColor(ClRandom); //случайныйцветотрезка < Координаты первой точки: >var x1 := random(50, W — 50); var y1 := random(50, H — 50); < Координаты второй точки: >var x2 := random(50, W — 50); var y2 := random(50, H — 50); < Рисуем отрезок от точки (x1, y1) до точки (x2, y2): >Line(x1, y1, x2, y2) end; sleep(2000); //задержка на 2 секунды ClearWindow //очищаем окно белым цветом end end. |
✎Line(x1, y1, x2, y2, C) – Проводит отрезок от точки (x1, y1) до точки (x2, y2), закрашивая отрезок цветом C. Есть только в PascalABC.Net. Толщина линии при этом равна 1 пиксель и её изменить нельзя.
✎MoveTo(x, y) – Устанавливает начальную точку (позицию) рисования в (x, y). Если эту процедуру не задействовать, то начальная точка по умолчанию принимается за (0, 0) – левый верхний угол окна. Процедура MoveTo используется совместно с LineTo (см. ниже).
✎LineTo(x, y) – Рисует отрезок от точки, в которой на данный момент находится конец отрезка (текущая позиция), до точки (x, y); начальная позиция задается с помощью MoveTo (см. выше), а новая позиция переходит в точку (x, y). Данная процедура задействуется при построении последовательной цепочки линий (отрезков) – когда конец каждой линии является одновременно началом следующей.
А как нарисовать звезду на паскале? Ниже представлен пример программы для рисования звезды в PascalABC.Net с указанным количеством концов. Все комментарии с в коде:
Результат выполнения программы представлен на рисунке:

Дата добавления: 2018-04-15 ; просмотров: 2024 ; Мы поможем в написании вашей работы!
Источник: studopedia.net