Программирование. Графика Pascal-Паскаль
В современных компьютерах изображения на экране строятся в виде растров, и всегда прямоугольных.
Пример растра и изображения, построенного на нем:

На рисунке вы видите сильно увеличенную картинку, на самом же деле элементарные точки, из которых состоит изображение, или пиксели, должны быть очень маленькими, чтобы глаз воспринимал картинку как единое целое. Пиксель ( Pixel ) – сокращение от Picture Element (элемент рисунка).
Экраны цветных мониторов состоят из прямоугольной решетки точек (пикселей), светящихся разным цветом. Каждый цветной пиксель образован тремя более мелкими по площади участками красного, зеленого и синего цветов. При свечении этих участков с разной интенсивностью цвета смешиваются, создавая элементы изображения различных оттенков и яркости.
Важной характеристикой растра является его расширение, т.е. количество точек (пикселей) на единицу длины. Чем это число выше, тем более мелкими являются сами пиксели, и, соответственно, более плотно они располагаются на плоскости, что и приводит к тому, что мы воспринимаем их как единое, цельное изображение. Из года в год разрешающая способность мониторов, принтеров, сканеров и т.п. растет.
Итак, на растровом устройстве отображения любая фигура состоит из множества точек пикселей. Естественно, положение каждой точки изображения задано координатами X и Y . Координаты – целые числа, они задают номера колонки и строки растра и не зависят от физического размера экрана. Оси координат направлены следующим образом: горизонтальная ось X направлена слева направо; вертикальная ось Y направлена сверху вниз; верхний левый угол имеет координаты (0,0).
Очевидно, что запись изображения требует хранения информации о положении множества точек, для каждой из которых должен быть задан цвет. Цветное изображение получается смешиванием трех основных цветов – красного, зеленого и синего. Такая модель представления цвета называется моделью RGB ( Red — Green — Blue ). Управляя интенсивностью компонентов, можно получить различные оттенки и степени интенсивности цвета. В частности, для получения градаций серого надо взять интенсивности трех основных цветов равными друг другу.
В современных SVGA мониторах предусмотрено, как правило, по 2 6=64 уровня интенсивности каждого из основных цветов, таким образом, в целом можно получить (2 6) 3=262144 цвета. Для представления большего числа цветов необходим больший объем памяти. Один бит может кодировать два цвета: 1 – белый, 0 – черный. Два бита могут хранить 2 2=4 цветовых комбинации, 4 бита – 16, 8 бит – 256, 16 бит – 65536, 32 бита – 4294967296.
Если для каждой точки задавать уровни красного, зеленого и синего цветов, то потребуется достаточно большой объем памяти для хранения информации об изображении. Для сокращения объема памяти используются палитры. При этом ограничиваются некоторым количеством цветов, например 16 или 256, каждому из цветов присваивается номер (соответственно, от 0 до 15 или от 0 до 255), и при записи изображения используют именно этот код. «Точка цвета номер 5». Информация о палитре, то есть данные, сколько красного, зеленого и синего нужно взять для получения «цвета номер 5», хранится и используется отдельно от записи изображения.
Важное понятие в машинной графике – графический примитив – совокупность пикселей, определяющая некоторую геометрическую фигуру. Наиболее распространенные примитивы – это точка, линия, прямоугольник, закрашенный прямоугольник, окружность и эллипс.
Растровые изображения обладают одним очень существенным недостатком: их трудно увеличивать или уменьшать, т.е. масштабировать. При уменьшении растрового изображения несколько соседних точек преобразуются в одну, поэтому теряется разборчивость мелких деталей. При увеличении – увеличивается размер каждой точки, поэтому появляется ступенчатый эффект. Кроме того растровые изображения занимают много места в памяти.
Чтобы избежать указанных проблем, изобрели так называемый векторный способ кодирования изображений.
Векторный способ представления графики заключается в том, что геометрические фигуры, кривые и прямые линии, составляющие рисунок, хранятся в памяти компьютера в виде математических формул и геометрических абстракций: круг, квадрат, эллипс и т.п. Для каждого примитива существуют свои характерные параметры. Например, для отрезка – это координаты концов; для окружности – координаты центра и радиус. Т.е. размеры, кривизна, местоположение элементов изображения хранятся в виде числовых коэффициентов. Благодаря этому появляется возможность масштабировать изображения, поворачивать, подвергать любым другим геометрическим преобразованиям с помощью простых математических операций, в частности, простым умножением параметров на коэффициент масштабирования. При этом качество изображения не меняется.
Формирование изображения на экране
Из книги Румянцева Дмитрия, Монастырского Леонида «Путь программиста: Опыт созидания личности программиста». – М.: «Издательский Дом ИНФРА-М», 2000.
Программисту не обязательно знать технические подробности конструкции монитора, но общее представление о его схеме он иметь должен. Еще важнее представлять, как программа работает с памятью, когда осуществляет вывод информации на какое-либо из устройств визуального отображения, подключенных к компьютеру.
Участок оперативной памяти компьютера, где хранится информация об изображении, появляющемся на экране, называется видеопамятью. Иногда эту область называют видеобуфером. Видеопамять занимает определенную область в адресном пространстве оперативной памяти компьютера, следовательно, видеопамять имеет ограниченный размер.
Видеопамять и похожа, и в то же время не похожа на RAM . Обычная память соединена с центральным процессором специальным устройством, которое называется шина данных. Не останавливаясь подробнее на конструкции шины данных, скажем лишь, что это просто пакет проводов, количество которых кратно двум. Можно сказать, что чем больше проводов в пакете, тем быстрее происходит обмен данными между процессором и памятью. Современные Pentium -машины имеют 32-разрядную шину, т.е. процессор может сразу читать 4 байта из памяти (и столько же в нее записывать). Разрядность шины данных – одно из самых узких мест в конструкции компьютера.
Видеопамять, как и любая другая память, соединена с процессором шиной данных. Но видеопамять, кроме того, подключена к специальной электронной схеме, которая на основе данных, хранящихся в видеобуфере, формирует изображение на экране. Физически экранное изображение обновляется 60 раз в секунду – с такой частотой упомянутая электронная схема осуществляет сканирование видеобуфера. Поэтому любое изменение состояния видеобуфера практически мгновенно (с точки зрения человека, смотрящего на экран) приводит к изменению изображения на экране.
Электронная схема, сканирующая видеобуфер и преобразующая двоичные числа в видеосигнал, называется адаптером видеодисплея или просто видеоадаптером.
Сегодня все большую популярность приобретают так называемые жидкокристаллические мониторы. Но большинство действующих сегодня мониторов по-прежнему представляют собой устройства, изображения в которых строится с помощью электронно-лучевой трубки. Напомним еще раз известный из курса физики принцип формирования изображения, получаемого в этом случае.
Этот способ называется растровым сканированием. Изображение «рисуется» тщательно сфокусированным электронным лучом. Поток электронов «бомбардирует» экран, покрытый специальным светящимся веществом – люминофором. Места, в которые ударяются электроны, начинают фосфоресцировать. В каждой точке свечение затухает приблизительно в течение нескольких сотых долей секунды, поэтому необходимо постоянно повторять «бомбардировку» поверхности экрана. Это задача специального устройства – электронной пушки. Наводчик электронной пушки (специальное электронное устройство) рассматривает весь экран как последовательность множества линий. Он «простреливает» последовательно каждую линию – слева направо, точка за точкой.
Движение луча по экрану происходит с огромной скоростью. Чтобы изображение, которое воспринимает человек, не было мерцающим, весь цикл – от первой до последней строки – должен быть закончен за 1/60 секунды (или еще быстрее). Следовательно, за секунду происходит не менее 60 проходов луча по всему экрану, строка за строкой. Такая схема формирования изображения называется растром. После того, как луч доходит до последней точки последней строки (до правого нижнего угла экрана), он мгновенно по диагонали переносится в начало первой строки экрана (левый верхний угол), и процесс повторяется.
Формирование цветного изображения осуществляется не одним, а тремя электронными лучами (красным, зеленым и синим), перемещающимся по экрану одновременно. Три луча подсвечивают сразу три элемента экрана, расположенных на очень незначительном угловом расстоянии друг от друга, поэтому человеческий глаз воспринимает эти три элемента как одну точку. Благодаря различной интенсивности свечения каждой из трех точек и эффекту аддитивного смешения трех цветов такая составная точка может иметь любой цветовой оттенок. Качество изображения тем выше, чем меньше расстояние между двумя отдельными точками. В современных мониторах расстояние между точками не превышает 0.25–0.26 мм.
Вернемся к видеоадаптеру. Помимо всего прочего, он должен подавать специальные синхронизирующие сигналы электронной пушке для правильного формирования изображения на экране. Первый синхронизирующий сигнал – V -сигнал – подается для начала сканирования экрана; второй сигнал – H -сигнал – для начала сканирования очередной строки. Кроме того, видеоадаптер должен управлять интенсивностью сканирующего луча. Интенсивность луча может меняться при прохождении каждой растровой точки, а значит можно произвольно менять и интенсивность свечения точки.
Существует два принципиально разных способа указания интенсивности свечения пикселя.
Первый применяется в так называемых цифровых мониторах. В этом случае для каждой точки монитору подается информация об ее интенсивности в виде двоичного числа. Используя аддитивную модель, передавая два бита для каждого цвета (красный, зеленый и синий), из которых формируется цвет точки, можно получить 64 цвета (4*4*4). Однако при увеличении количества цветов нужно увеличивать и количество битов для каждого цвета (т.е. количество проводов для каждого цвета).
Поэтому конструкторы мониторов, в конце концов, отказались от цифровой схемы и пришли к аналоговой. При этой схеме сигналы V и H остаются по-прежнему цифровыми, а сигналы о трех составляющих цвета становятся аналоговыми и поступают по трем проводам. На каждом проводе поддерживается напряжение от 0 до 1 вольта с плавным переходом из одного состояния в другое. Ноль вольт на проводе указывает на отсутствие свечения, 1 вольт – на максимальное свечение. При такой схеме каждый из трех цветов условно может принимать бесконечное число оттенков. Следовательно, таким образом можно задавать десятки миллионов цветов.
Работа с графикой в Паскале
Инициализация графического режима. Множество графических процедур и функций среды программирования Pascal собраны в модуле Graph . Для подключения библиотеки графических функций и процедур необходимо подключить модуль к вашей программе строкой
Формирование изображения на экране
Программисту не обязательно знать технические подробности конструкции монитора, но общее представление о его схеме он иметь должен. Еще важнее представлять, как программа работает с памятью, когда осуществляет вывод информации на какое-либо из устройств визуального отображения, подключенных к компьютеру.
Участок оперативной памяти компьютера, где хранится информация об изображении, появляющемся на экране, называется видеопамятью. Иногда эту область называют видеобуфером. Видеопамять занимает определенную область в адресном пространстве оперативной памяти компьютера, следовательно, видеопамять имеет ограниченный размер.
Видеопамять и похожа, и в то же время не похожа на RAM . Обычная память соединена с центральным процессором специальным устройством, которое называется шина данных. Не останавливаясь подробнее на конструкции шины данных, скажем лишь, что это просто пакет проводов, количество которых кратно двум. Можно сказать, что чем больше проводов в пакете, тем быстрее происходит обмен данными между процессором и памятью. Современные Pentium -машины имеют 32-разрядную шину, т.е. процессор может сразу читать 4 байта из памяти (и столько же в нее записывать). Разрядность шины данных – одно из самых узких мест в конструкции компьютера.
Видеопамять, как и любая другая память, соединена с процессором шиной данных. Но видеопамять, кроме того, подключена к специальной электронной схеме, которая на основе данных, хранящихся в видеобуфере, формирует изображение на экране. Физически экранное изображение обновляется 60 раз в секунду – с такой частотой упомянутая электронная схема осуществляет сканирование видеобуфера. Поэтому любое изменение состояния видеобуфера практически мгновенно (с точки зрения человека, смотрящего на экран) приводит к изменению изображения на экране.
Электронная схема, сканирующая видеобуфер и преобразующая двоичные числа в видеосигнал, называется адаптером видеодисплея или просто видеоадаптером.
Сегодня все большую популярность приобретают так называемые жидкокристаллические мониторы. Но большинство действующих сегодня мониторов по-прежнему представляют собой устройства, изображения в которых строится с помощью электронно-лучевой трубки. Напомним еще раз известный из курса физики принцип формирования изображения, получаемого в этом случае.
Этот способ называется растровым сканированием. Изображение «рисуется» тщательно сфокусированным электронным лучом. Поток электронов «бомбардирует» экран, покрытый специальным светящимся веществом – люминофором. Места, в которые ударяются электроны, начинают фосфоресцировать. В каждой точке свечение затухает приблизительно в течение нескольких сотых долей секунды, поэтому необходимо постоянно повторять «бомбардировку» поверхности экрана. Это задача специального устройства – электронной пушки. Наводчик электронной пушки (специальное электронное устройство) рассматривает весь экран как последовательность множества линий. Он «простреливает» последовательно каждую линию – слева направо, точка за точкой.
Движение луча по экрану происходит с огромной скоростью. Чтобы изображение, которое воспринимает человек, не было мерцающим, весь цикл – от первой до последней строки – должен быть закончен за 1/60 секунды (или еще быстрее). Следовательно, за секунду происходит не менее 60 проходов луча по всему экрану, строка за строкой. Такая схема формирования изображения называется растром. После того, как луч доходит до последней точки последней строки (до правого нижнего угла экрана), он мгновенно по диагонали переносится в начало первой строки экрана (левый верхний угол), и процесс повторяется.
Формирование цветного изображения осуществляется не одним, а тремя электронными лучами (красным, зеленым и синим), перемещающимся по экрану одновременно. Три луча подсвечивают сразу три элемента экрана, расположенных на очень незначительном угловом расстоянии друг от друга, поэтому человеческий глаз воспринимает эти три элемента как одну точку. Благодаря различной интенсивности свечения каждой из трех точек и эффекту аддитивного смешения трех цветов такая составная точка может иметь любой цветовой оттенок. Качество изображения тем выше, чем меньше расстояние между двумя отдельными точками. В современных мониторах расстояние между точками не превышает 0.25–0.26 мм.
Вернемся к видеоадаптеру. Помимо всего прочего, он должен подавать специальные синхронизирующие сигналы электронной пушке для правильного формирования изображения на экране. Первый синхронизирующий сигнал – V -сигнал – подается для начала сканирования экрана; второй сигнал – H -сигнал – для начала сканирования очередной строки. Кроме того, видеоадаптер должен управлять интенсивностью сканирующего луча. Интенсивность луча может меняться при прохождении каждой растровой точки, а значит можно произвольно менять и интенсивность свечения точки.
Существует два принципиально разных способа указания интенсивности свечения пикселя.
Первый применяется в так называемых цифровых мониторах. В этом случае для каждой точки монитору подается информация об ее интенсивности в виде двоичного числа. Используя аддитивную модель, передавая два бита для каждого цвета (красный, зеленый и синий), из которых формируется цвет точки, можно получить 64 цвета (4*4*4). Однако при увеличении количества цветов нужно увеличивать и количество битов для каждого цвета (т.е. количество проводов для каждого цвета).
Поэтому конструкторы мониторов, в конце концов, отказались от цифровой схемы и пришли к аналоговой. При этой схеме сигналы V и H остаются по-прежнему цифровыми, а сигналы о трех составляющих цвета становятся аналоговыми и поступают по трем проводам. На каждом проводе поддерживается напряжение от 0 до 1 вольта с плавным переходом из одного состояния в другое. Ноль вольт на проводе указывает на отсутствие свечения, 1 вольт – на максимальное свечение. При такой схеме каждый из трех цветов условно может принимать бесконечное число оттенков. Следовательно, таким образом можно задавать десятки миллионов цветов.
Инициализация графического режима. Множество графических процедур и функций среды программирования Pascal собраны в модуле Graph . Для подключения библиотеки графических функций и процедур необходимо подключить модуль к вашей программе строкой
Uses graph ;
Взаимодействие программы и видеосистемы в графических режимах обеспечивают драйверы. Драйверы собраны в файлах, имеющих расширение BGI : CGA . BGI , EGAVGA . BGI , HERC . BGI , IBM 8514. BGI , ATT . BGI , PC 3270. BGI и др. Драйвер – это специальная программа, осуществляющая управление тем или иным техническим средством ПК. Графический драйвер управляет графическим адаптером в графическом режиме.
Графические возможности конкретного адаптера определяются разрешением экрана, т.е. общим количеством пикселей, а также количеством цветов. Кроме того, многие адаптеры могут работать с несколькими графическими страницами.
Для инициализации графического режима используется процедура:
InitGraph(var Driver, Mode: integer; Path:string);
Где Driver – переменная типа integer , определяющая тип графического драйвера; Mode – переменная того же типа, задающая режим работы графического адаптера; Path – выражение типа string , содержащее путь доступа к файлу драйвера.
Таблица 1. Константы, определяющие графический режим
Графический драйвер
Константа режима
Растр
Палитра
Число страниц
Значение
Имя
Значение
Выбор драйвера автоматически
Графика, графика, графика! Часть 1. Введение.
Важна ли графика для начинающих программистов? Или следует в первую очередь изучать конструкции языка, алгоритмы, методику написания программ? А графика — баловство?
Несомненно, все зависит от аудитории. Если программированию обучается школьник, то графика очень важна — мышление конкретное, и хочется сразу видеть результаты своего труда. Абстрактное мышление быстро утомляет. Если программировать учится студент — здесь другая картина. Графика нужна по большей мере как вспомогательное средство для визуализации результатов, динамики выполнения алгоритмов. Но что однозначно — графика нужна.
Меня вот часто спрашивают студенты — как сделать что-нибудь графическое на C++? Много лет уже спрашивают. Уже устал отвечать — не знаю.
Конечно, не каждый язык должен иметь стандартную поддержку графики. Даже универсальный. Но вот от языка для обучения (а язык Паскаль используется в основном для обучения) поддержку графики — ждут.
В старом добром Бейсике — чем он подкупал — на Корветах там всяких, Атари и Синклерах — загрузил среду, написал
Circle(100,100,50)
и получил на экране кружочек — прямо поверх кода. Это потом с появленим MS DOS, где основным режимом стал текстовый, все усложнилось.
На старом добром Turbo Pascal был такой замечательный модуль Graph — подключил его, написал пару строчек непонятных заклинаний — и рисуй себе все что угодно аж 256 цветами! Вот эти заклинания:
uses Graph; var GraphDriver,GraphMode: integer; begin InitGraph(GraphDriver,GraphMode,'d:\turbo\bgi'); end.
Еще в конце там CloseGraph надо было вызвать. И знатоки с умным видом рассказывали новичкам, что у тебя там неправильно установлен путь к графическому драйверу или драйвер у тебя не тот.
Вообщем, прошли те времена — появилась Windows, а в ней основной режим — графический.
Прошли ли? Меня до сих пор спрашивают, почему в PascalABC нет модуля Graph? Отвечаю, что не мог больше терпеть. Но нет-нет да мелькнет в Интернете на форуме пост какого-нибудь новичка — представляете, настолько плохой PascalABC, что даже графики в нем нет или она там какая-то своя! Не та, что описана в груде книжек по Турбо-Паскалю, а другая!
Вот об этой другой графике мы и поговорим.
Те, кто программировал графические приложения под Windows, знают, что рисовать лучше всего в обработчике события WM_PAINT или OnPaint (последнее — если используется какой-нибудь объектный каркас для Windows-приложения). В этом обработчике нельзя рисовать долго, поскольку программа на время его работы блокируется. А если рисовать в других обработчиках, то нарисованное стирается при следующей перерисовке окна. Короче — куча проблем!
Идея была простой: создать графическую библиотеку, подключающуюся крайне просто, где эти проблемы были бы решены. Еще лучше, если графическое приложение будет похоже на обычную программу: чтобы сразу после begin можно было писать графические команды.
Решение было найдено — вот эта простейшая программа:
uses GraphABC; begin Rectangle(10,10,100,100); end.
При запуске такой программы возникает специальное графическое окно, и все рисование происходит именно на нем. Изображение на нем не пропадет при перерисовке, и можно рисовать сколь угодно долго — программа не окажется заблокированной на время рисования. Это значит, в частности, что можно легко делать простую анимацию.
Вот несколько очень простых графических программок — совершенно бесполезны — чистое баловство!
Программа 1. Показывает использование процедуры SetPixel и функции RGB.
uses GraphABC; begin for var x:=0 to Window.Width-1 do for var y:=0 to Window.Height-1 do SetPixel(x,y,RGB(2*x-y,x-3*y,x+y)); end.
Программа 2. Рисование звездочки. Показывает использование процедур MoveTo и LineTo, а также полярных координат.
uses GraphABC; const n = 17; // количество точек n1 = 7; // через сколько точек соединять begin var a := -Pi/2; var Center := Window.Center; var Radius := Window.Height/2.2; MoveTo(Round(Center.X+Radius*cos(a)),Round(Center.Y+Radius*sin(a))); for var i:=1 to n do begin a += n1*2*Pi/n; LineTo(Round(Center.X+Radius*cos(a)),Round(Center.Y+Radius*sin(a))); end; end.
Пример 3. Цифровые часы. Показывает использование процедуры TextOut, а также функций TextWidth, TextHeight.
uses GraphABC,System; begin Font.Size := 80; var x0 := (Window.Width - TextWidth('00:00:00')) div 2; var y0 := (Window.Height - TextHeight('00:00:00')) div 2; while True do begin var t := DateTime.Now; var s := string.Format('::',t.Hour,t.Minute,t.Second); TextOut(x0,y0,s); Sleep(1000); end; end.
Ну вот, для введения и достаточно.
А симпатичные примеры на графику строк эдак на 10-15 — пожалуйста — пишите в комментариях!
Программа которая строит графики на паскале
Всё для Web Дизайнера — Pascal: Учим Turbo Pascal, введение в Turbo Pascal, основные понятия системы программирования Турбо Паскаль, основные понятия системы программирования Турбо Паскаль(Продолжение), операторы языка Паскаль, процедуры и функции, массивы, графика в системе Турбо Паскаль, графика в системе Турбо Паскаль(продолжение), графика в системе Турбо Паскаль, циклы в графике.
Графика в системе Турбо Паскаль.
Экран дисплея ПК представляет собой прямоугольное поле, состоящее из большого количества точек. Дисплей может работать в текстовом и графическом режимах. Но в отличие от текстового режима в графическом режиме имеется возможность изменять цвет каждой точки.
Чтобы сделать процесс графического программирования более эффективным, фирма Borland International разработала специализированную библиотеку Graph (в этом библиотечном модуле содержится 79 графических процедур, функций, различных стандартных констант и типов данных), набор драйверов, позволяющих работать с разными типами мониторов, и набор шрифтов для вывода на графический экран текстов разной величины и формы.
Аппаратная поддержка графики ПК обеспечивается двумя основными модулями: видеомонитором и видеоадаптером. Какой бы адаптер ни был установлен на компьютере, мы можем использовать один и тот же набор графических процедур и функций Турбо Паскаля благодаря тому, что их конечная настройка на конкретный адаптер осуществляется автоматически. Эту настройку выполняют графические драйверы.
Запуск и завершение работы в графической системе осуществляется следующим образом:
1. Подключить модуль Graph (библиотеку графических процедур): normal»>uses Graph;
2. Установить графический режим:
— описываем переменные, которые определяют графический драйвер и монитор:
var gd, gm: integer;
— задаем команду ПК для самовыбора значений переменных:
gd:=Detect;(значение gm после команды gd:=detect; определяется автоматически)
— инициализируем графический режим:
InitGraph( gd, gm,’ указывается путь к драйверу, чем подробнее, тем лучше’)
С этого момента все графические средства доступны пользователю.
3. Завершить работу в графической системе: CloseGraph;
Глава 6. Графика в системе Турбо Паскаль
Базовые процедуры и функции
Для построения изображений на экране используется система координат. Отсчет начинается от верхнего левого угла экрана, который имеет координаты (0,0). Значение Х (столбец) увеличивается слева направо, значение Y (строка) увеличивается сверху вниз. Чтобы строить изображения, необходимо указывать точку начала вывода. В текстовых режимах эту точку указывает курсор, который присутствует на экране. В графических режимах видимого курсора нет, но есть невидимый текущий указатель CP (Current Pointer). Фактически это тот же курсор, но он невидим.
Процедуры модуля Graph
Процедура Формат Действие
SetColor SetColor (a: word); Устанавливает цвет, которым будет осуществляться рисование
SetBkColor SetBkColor (a: word); Устанавливает цвет фона
SetFillStyle SetFillStyle (a,b: word); a – стиль закраски, b – цвет Устанавливает стиль и цвет закраски
SetLineStyle SetLineStyle (a,b,c: word); а – стиль линии, b- образец построения линии (может устанавливаться пользователем), с-толщина линии Устанавливает стиль и толщину линии
SetTextStyle SetTextStyle (a,b,c: word); Устанавливает шрифт, стиль и размер текста
SetFillPattern SetFillPattern (Pattern: FillpatternType; Color:word); Pattern- маска Выбирает шаблон заполнения, определенный пользователем
ClearDivice ClearDivice Очищает экран и устанавливает текущий указатель в начало
SetViewPort SetViewPort (x1, y1 , x2, y2 : integer, Clip:boolean); Устанавливает текущее окно для графического вывода
ClearViewPort ClearViewPort Очищает окно
PutPixel PutPixel (a,b,c :integer); Рисует точку цветом с в (x,y)
Line Line(x1, y1 , x2,y2 :integer); Рисует линию от (x1, y1) к (x2,y2)
Rectangle Rectangle (x1, y1 , x2, y2:integer ); Рисует прямоугольник с диагональю от (x1, y1) к (x2, y2)
Bar Bar (x1, y1 , x2, y2:integer); Рисует закрашенный прямоугольник
Bar3D Bar3D (x1, y1 , x2,y2, d:integer, a:boolean); Рисует трехмерную полосу (параллелепипед)
Circle Circle (x,y,r: word); Рисует окружность радиуса r с центром в точке (x, y)
Arc Arc(x, y, a, b, R:integer); a, b- начальный и конечный углы в градусах Рисует дугу из начального угла к конечному, используя (x,y) как центр
Ellipse Ellipse (x, y, a, b, Rx, Ry: integer); a, b- начальный и конечный углы в градусах Рисует эллиптическую дугу от начального угла к конечному, используя (x, y) как центр
FillEllipse FillEllipse (x, y, Rx, Ry:integer); Rx, Ry – вертикальная и горизонтальная оси Рисует закрашенный эллипс
MoveTo MoveTo (x, y:integer); Передвигает текущий указатель в (x, y)
MoveRel MoveRel(x, y : integer); Передвигает текущий указатель на заданное расстояние от текущей позиции на x по горизонтали и на y по вертикали
OutText OutText (text: string); Выводит текст от текущего указателя
OutTextxy OutTextxy(x, y: integer, text: string); Выводит текст из (x, y)
Sector Sector(x, y, a, b, Rx, Ry: integer); a, b- начальный и конечный углы в градусах Рисует и заполняет сектор эллипса
Функции модуля Graph
GetBkColor Возвращает текущий фоновый цвет
GetColor Возвращает текущий цвет
GetX Возвращает координату X текущей позиции
GetY Возвращает координату Y текущей позиции
GetPixel Возвращает цвет точки в (x, y)
Глава 6. Графика в системе Турбо Паскаль
Экран и окно в графическом режиме
По аналогии с текстовыми режимами графический экран может рассматриваться как одно большое или несколько меньших по размеру окон. После установки окна вся остальная площадь экрана как бы не существует, и весь ввод-вывод осуществляется только через окно. В каждый отдельный момент может быть активным только одно окно. Если окон несколько, за переключение ввода-вывода в нужное окно отвечает программист.
По умолчанию окно занимает весь экран, значения координат его левого верхнего и правого нижнего угла устанавливаются автоматически процедурой инициализации InitGraph.
Если требуется создать окно, следует воспользоваться процедурой SetViewPort (x1, y1, x2, y2 : integer, Clip:boolean) ; где x1, y1 – координаты левого верхнего угла, x2, y2 –
координаты правого нижнего угла окна. Параметр Clip определяет, будет ли рисунок отсекаться при выходе за границы окна (Clip:= True) или нет (Clip:=False). После создания окна за точку отсчета принимается верхний левый угол окна, имеющий координаты (0,0).
Координатную систему полного экрана можно восстановить, в частности, с помощью ClearDevice или задав в процедуре установки окна максимально возможные значения:
SetViewPort( 0, 0, GetMaxX, GetMaxY, true);
Необходимо помнить, что в отличие от текстовых окон графические окна после команды установки фона SetBkColor и очистки с помощью ClearViewPort меняют фон вместе с общим фоном экрана. Поэтому фон (точнее «закраску») графического окна следует устанавливать с помощью процедур SetFillStyle и SetFillPattern.
Глава 6. Графика в системе Турбо Паскаль
Вывод простейших фигур
Вывод точки
Какие бы изображения не выводились на экран, все они построены из точек, теоретически можно создать любое изображение путем построения точек определенного цвета в нужном месте экрана. В библиотеке Graph вывод точки осуществляется процедурой
PutPixel (x, y: integer, color:word);
где x, y: координаты расположения точки, color – цвет.
Возможные значения Color приведены в таблице:
Цветовая шкала
Цвет Код Цвет Код
Black – черный 0 DarkGray – темно-серый 8
Blue – синий 1 LightBlue – голубой 9
Green — зеленый 2 LightGreen – ярко-зеленый 10
Gyan – бирюзовый 3 LightGyan – ярко-бирюзовый 11
Red – красный 4 LightRed – ярко-красный 12
Magenta – малиновый 5 LightMagenta – ярко-малиновый 13
Brown – коричневый 6 Yellow – желтый 14
LightGray – светло-серый 7 White – белый 15
Пример.
PutPixel(320, 240, 4); ь
э- выводит в центре экрана точку красного цвета
PutPixel(320,240, Red);ю
Вывод линии
Из точек строятся линии (отрезки прямых). Это можно сделать с помощью процедуры
Line (x1, y1 , x2,y2 :integer);
где x1, y1 – координаты начала, x2,y2 — координаты конца линии, например Line(1,1,600,1);
В процедуре Line нет параметра для установки цвета. В этом случае цвет задается процедурой SetColor (цвет: word); где цвет из таблицы 1.
Пример.
SetColor(Gyan);
Line(1,1,600,1);
Для черчения линий применяются еще две процедуры: LineTo и LineRel. Процедура LineTo (x,y: integer) строит линию из точки текущего положения указателя в точку с координатами x,y. Процедура LineRel (dx,dy: integer) проводит линию от точки текущего расположения указателя (x, y) в точку x+dx, y+dy.
Турбо Паскаль позволяет вычерчивать линии самого различного стиля: тонкие, широкие, штриховые, пунктирные и т.д. Установка стиля производится процедурой SetLineStyle(a,b,c: word), где a устанавливает тип строки, возможные значения которого приведены в таблице 2; b – образец, с – толщина линии, определяемая константами, указанными в таблице 3. Если применяется один из стандартных стилей, то значение b равно 0. Если пользователь хочет активизировать собственный стиль, то значение b =4. В этом случае пользователь сам указывает примитив (образец), из которого строится линия.
Например:
SetLineStyle(1,0,1);
Line(15,15, 150,130);
или
SetLineStyle(UserBitLn,$5555,ThickWidth);
Line(15,15, 150,130);
таблица 2
Константа Значение Описание
SolidLn 0 Непрерывная линия
DottedLn 1 Линия из точек
CenterLn 2 Линия из точек и тире
DashedLn 3 Штриховая линия
UserBitLn 4 Тип пользователя
таблица 3
Константа Значение Описание
NormWidth 1 Нормальная толщина (1 пиксель)
ThickWidth 3 Жирная линия (3 пикселя)
Пример: Написать программу, которая вычерчивает треугольник красной линией в центре экрана.
Program treug;
uses graph; < подключение библиотеки графических процедур>
var gd,gm: integer;
begin
gd:=detect;
initgraph(gd, gm, ‘ c/bp’);
SetColor(4);
SetLineStyle(1,0,3);
Line(320, 240, 320, 180);
Line(320, 240, 390, 240);
Line(390, 240, 320, 180);
end.
Глава 6. Графика в системе Турбо Паскаль
Построение многоугольников
Построение прямоугольников
Для построения прямоугольных фигур имеется несколько процедур. Первая из них – вычерчивание одномерного прямоугольника: Rectangle (x1, y1 , x2, y2:integer ), где x1, y1 – координаты левого верхнего угла, x2, y2- координаты правого нижнего угла прямоугольника. Область внутри прямоугольника не закрашена и совпадает по цвету с фоном.
Более эффектные для восприятия прямоугольники можно строить с помощью процедуры Bar (x1, y1 , x2, y2:integer), которая рисует закрашенный прямоугольник. Цвет закраски устанавливается с помощью SetFillStyle. Еще одна эффектная процедура: Bar3D (x1, y1 , x2,y2, d: integer, a:boolean) вычерчивает трехмерный закрашенный прямоугольник (параллелепипед). При этом используются тип и цвет закраски, установленные с помощью SetFillStyle. Параметр d представляет собой число пикселей, задающих глубину трехмерного контура. Чаще всего его значение равно четверти ширины прямоугольника ( d:= (x2 — x1) div 4 ). Параметр a определяет, строить над прямоугольником вершину (а:=True) или нет (a:=False).
Примеры использования:
1. SetColor(Green);
Rectangle (200, 100, 250,300);
2. SetFillStyle(1,3);
Bar(10,10,50,100);
3. SetFillStyle(1,3);
Bar3D(10,10,50,100,10,True);
Построение многоугольников
Многоугольники можно рисовать самыми различными способами, например с помощью процедуры Line. Однако в Турбо Паскале имеется процедура DrawPoly, которая позволяет строить любые многоугольники линией текущего цвета, стиля и толщины. Она имеет формат DrawPoly( a: word, var PolyPoints)
Параметр PolyPoints является нетипизированным параметром, который содержит координаты каждого пересечения в многоугольнике. Параметр а задает число координат в PolyPoints. Необходимо помнить, что для вычерчивания замкнутой фигуры с N вершинами нужно передать при обращении к процедуре DrawPoly N+1 координату, где координата вершины с номером N будет равна координате вершины с номером 1.
Проиллюстрируем на примере:
program tr;
uses crt, graph;
var gd, gm: integer;
pp: array[1..4] of PointType;
xm, ym, xmaxD4, ymaxD4:word;
begin
gd:= detect;
Initgraph(gd, gm, ‘ c/bp’);
xm:=GetmaxX; ym:=GetmaxY;
xmaxD4:=xm div 4;
ymaxD4:= ym div 4;
pp[1].x := xmaxD4;
pp[1].y := ymaxD4;
pp[2].x := xm — xmaxD4;
pp[2].y := ymaxD4;
pp[3].x := xm div 2;
pp[3].y := ym — ymaxD4;
pp[4] :=pp[1];
SetColor(4);
DrawPoly(4,pp);
readln;
CloseGraph
end.
В результате работы программы на экране появится красный треугольник на черном фоне. Изменить фон внутри треугольника можно с помощью процедуры FillPoly(a: word, var PolyPoints). Значения параметров те же, что и в процедуре DrawPоly. Действие тоже аналогично, но фон внутри многоугольника закрашивается. В качестве примера нарисуем в левой верхней части экрана четырехугольную звезду зеленого цвета:
program g;
uses crt, graph;
const
Star: array[1..18] of integer = (75, 0, 100, 50, 150, 75, 100, 100, 75, 150, 50, 100, 0, 75, 50, 50, 75, 0);
var
gd, gm: integer;
begin
gd:= detect;
initgraph(gd, gm, ‘ c/bp’);
SetFillStyle(1,2);
FillPoly(9,Star);
CloseGraph;
Pascal
Запуск кода:
Для того чтобы запустить код нужно открыть приложение PascalABC.NET. Далее нужно скопировать код в рабочую зону и нажать на кнопку «Выполнить». После чего произойдет компиляция кода и с помощью модуля GraphABC появится окно в котором уже и будет построен фрактал.
Войдите или зарегистрируйтесь, чтобы комментировать
Метод наименьших квадратов
29. Апрель 2020 — 20:05 | Керим Ягьяев
Среда программирования:
Borland Delphi 7.0
Статья по теме:
Мы можем построить по любому произвольно задаваемому набору точек
среднеквадратическое приближение методом наименьших квадратов.
Вводим данные как показано на примере, и программа строит МНК для линейных, квадратичных и степенных функций.
Войдите или зарегистрируйтесь, чтобы комментировать
Кривая Дракона
29. Апрель 2020 — 10:21 | Москвитина Алек.
![]()
Среда программирования:
PascalABC.NET
Статья по теме:
Работа с кодом :
Чтобы запустить наш код нам понадобится открыть приложение PascalABC.NET. Мы должны скопировать код и нажать на кнопку «Выполнить». После чего произойдет компиляция кода и помощью модуля GraphABC появится окно в котором уже и будет построен фрактал.
Войдите или зарегистрируйтесь, чтобы комментировать
Дерево Пифагора
29. Апрель 2020 — 9:53 | Мамутов Селим
![]()
Среда программирования:
PascalABC.NET
Статья по теме:
Запуск кода:
Для того чтобы запустить код нужно открыть приложение PascalABC.NET. Далее нужно скопировать код в рабочую зону и нажать на кнопку «Выполнить». После чего произойдет компиляция кода и с помощью модуля GraphABC появится окно в котором уже и будет построен фрактал.
Войдите или зарегистрируйтесь, чтобы комментировать
Кривая Минского
29. Апрель 2020 — 9:37 | Мамутов Селим
Среда программирования:
PascalABC.NET
Статья по теме:
Запуск кода:
Для того чтобы запустить код нужно открыть приложение PascalABC.NET. Далее нужно скопировать код в рабочую зону и нажать на кнопку «Выполнить». После чего произойдет компиляция кода и с помощью модуля GraphABC появится окно в котором уже и будет построен фрактал.
Войдите или зарегистрируйтесь, чтобы комментировать
Отсечение отрезка
13. Май 2017 — 15:56 | Португальская Арина
![]()
Среда программирования:
Статья по теме:
В программе используется алгоритм Алгоритм Сазерленда-Коэна отсечения отрезка.
Для построения сцены необходимо щелкнуть на форме левой кнопкой мыши. По нажатию левой кнопки мыши на экране появляется прямоугольник и видимая часть отрезка в нём.
Войдите или зарегистрируйтесь, чтобы комментировать
Алгоритм Брезенхема для генерации эллипса
9. Апрель 2017 — 12:49 | Консманов Алексей
![]()
Среда программирования:
Lazarus 1.2.4
Статья по теме:
Задача : построить (растеризовать) эллипс, зная координаты его центра и длины меньшей и большей полуосей a и b соответственно.
Суть алгоритма : использование модифицированного алгоритма Брезенхема для построение окружности . Как и в оригинальном алгоритме Брезенхема, выбор ближайшей точки основан на анализе знаков управляющих
В поля «X» и «Y» вводятся координаты центра окружности, в поля «a» и «b» — длины соответствующих полуосей.
Войдите или зарегистрируйтесь, чтобы комментировать
Алгоритм заполнения окружностей
23. Март 2017 — 17:31 | Консманов Алексей
![]()
Среда программирования:
Lazarus 1.2.4
Статья по теме:
Задача: зарисовать (заполнить) окружность, зная координаты её центра и радиус.
Суть алгоритма: используя свойства вписанной в квадрата окружности, можно утверждать, что все точки окружности и круга, ограниченного этой окружностью, лежат в квадрате,описанном вокруг данной окружности. Перебирая все точки двойным циклом (по OX и OY) и проверяя их удовлетворение неравенству (X-текущийX) 2 +(Y-текущийY) 2 ≤Радиус 2 строится сама окружность и эта же окружность заполняется
Войдите или зарегистрируйтесь, чтобы комментировать
Пример фрактала «Папоротник Барнсли»
11. Ноябрь 2016 — 4:52 | Абдурахманов Алим
![]()
Среда программирования:
Pascal ABC.NET
Статья по теме:
Вариант реализации фрактала «Папоротника Барнсли».