Графика, графика, графика! Часть 1. Введение. Паскаль рисование


Как нарисовать в паскале | Сделай все сам.

Язык программирования Turbo Pascal разрешает рисовать в графическом режиме на экране разные фигуры. С подмогой точек, линий, дуг дозволено возвести всякий графический объект. Pascal использует растровый режим графики с разрешением экрана 640 х 480. Рисование заключается в задании графическим процедурам координат исходной и финальной точки выводимого объекта. Цвет объекта, толщина линий, как и их жанр, также задаются в качестве параметров графических процедур. Для рисования с подмогой программных средств необходимо подключить графический модуль Pascal.

Вам понадобится

  • Среда программирования Turbo Pascal

Инструкция

1. Разберите данный объект для рисования на составляющие элементы. Выделите отдельные линии, дуги, окружности, прямоугольники и точки. Именно эти фигуры дозволено нарисовать с поддержкой процедур языка Turbo Pascal.

2. В самом начале программного кода подключите графический модуль. Для этого запишите строку вида: uses graph. Дальше сделайте целочисленные переменные для инициализации графического режима: var gdet, gm: integer.

3. В теле программы за ключевым словом begin проинициализируйте переменные, присвоив одной из них нулевое значение, а 2-й значение detect. Дальше укажите запуск графического режима рисования, введите строку вида: initgraph(gdet, gm, »). Очистите устройство для итога графических данных: cleardevice.

4. Установите цвет фона для рисования и цвет линий рисуемых объектов. Используйте для этого процедуры SetBkColor(white) и SetColor(8). В скобках указывается устанавливаемый цвет. Каждого в Pascal применяется 16 цветов, и весь из них задается либо цифрой, либо словом из особой таблицы цветов.

5. Изобразите себе координатную сетку экрана, где ось х расположена слева направо, а ось у проходит сверху вниз. В начале данной системы координат, то есть в левом верхнем углу экрана, находится координата (0,0). Вычислите координаты необходимого вам расположения первого графического объекта. Все координаты для рисования фигур задавайте именно в данной системе.

6. Нарисуйте линию с подмогой процедуры line(х,у,х1,у1), где координаты х, у являются точкой начала линии, а х1, у1 — ее концом. При необходимости поменяйте толщину либо тип линии. Для этого применяется процедура SetLineStyle(0,0,NormWidth). Первым параметром процедуры дозволено изменить линию, сделав ее штрихом, пунктиром – поменяйте данную цифру на 1 либо 2. 3-й параметр задает толщину линий. По умолчанию неизменно установлен параметр NormWidth — тонкие линии, для толстых линий поставьте ThickWidth. Измененный тип линии будет рисоваться позже вызова данной процедуры.

7. Поставьте точку на экране с поддержкой процедуры PutPixel(x, y, color), тут х и у также координаты точки, а color — ее цвет. Перед рисованием замкнутой фигуры дозволено задать ее заливку. Для этого вызовите процедуру SetFillStyle (EmptyFill, 0), где 1-й параметр указывает на сплошную заливку фигуры, а 2-й – задает цвет заливки.

8. Прямоугольная фигура рисуется процедурой Rectangle(x,y,x2,y2) – координаты задают левый верхний и правый нижний углы фигуры. Для рисования круга напишите строку Circle(x, y, R), где x, y, R – координаты центра и радиус окружности все также в пикселях. Эллипс нарисовать труднее, для этого применяется гораздо огромнее параметров: Ellipse(x, y, BegA, EndA, RX, RY). Тут x, y тот же центр эллипса, а BegA и EndA указывают угол, на котором необходимо начинать эллиптическую дугу и заканчивать ее. Переменные RX, RY задают радиус эллипса по оси х и у соответственно.

9. Если у вас заданна фигура, рисование которой проще каждого провести отдельными отрезками, используйте для этого процедуры MoveTo и LineTo. Вначале установите нынешний курсор в необходимую вам точку: MoveTo (х, у). После этого проведите из нее линию до дальнейшей точки LineTo(х1, у1) и вновь нарисуйте прямую линию LineTo(х2, у2) и так до тех пор пока не получите начальную фигуру.

10. В конце рисования в программном коде закройте графический режим строкой: closegraph. Закончите тело программы, как традиционно, словом end. Сейчас код дозволено компилировать и запускать на выполнение.

Обратите внимание! Графика в Паскале.Анимация. Динамические рисунки Turbo Pascal.  Нарисовать эллипс под любым углом. Кривые по уравнению. Что необходимо знать для создания изображений в Turbo P…

Полезный совет При помощи особых процедур и функций дозволено нарисовать простейшие примитивы, такие как круг, квадрат и т.п. 

Читайте также

jprosto.ru

Графика, графика, графика! Часть 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('{0:d2}:{1:d2}:{2:d2}',t.Hour,t.Minute,t.Second); TextOut(x0,y0,s); Sleep(1000); end; end.

Ну вот, для введения и достаточно.

А симпатичные примеры на графику строк эдак на 10-15 - пожалуйста - пишите в комментариях!

pascalabc.net

Рисование на PascalABC.NET с использованием циклов

Среда программирования: 

Обычно начинающие программисты рисуют графические изображения. указывая координаты непосредственно в месте рисования графического объекта.

Например :

uses GraphABC;   begin rectangle(50,50,450,450); // рамка setbrushcolor(clBlack); // цвет заливки (рисуем только чёрные ячейки)   Rectangle(100,50,150,100); Rectangle(200,50,250,100); Rectangle(300,50,350,100); Rectangle(400,50,450,100);   Rectangle(50,100,100,150); Rectangle(150,100,200,150); Rectangle(250,100,300,150); Rectangle(350,100,400,150);   Rectangle(100,150,150,200); Rectangle(200,150,250,200); Rectangle(300,150,350,200); Rectangle(400,150,450,200);   Rectangle(50,200,100,250); Rectangle(150,200,200,250); Rectangle(250,200,300,250); Rectangle(350,200,400,250);   Rectangle(100,250,150,300); Rectangle(200,250,250,300); Rectangle(300,250,350,300); Rectangle(400,250,450,300);   Rectangle(50,300,100,350); Rectangle(150,300,200,350); Rectangle(250,300,300,350); Rectangle(350,300,400,350);   Rectangle(100,350,150,400); Rectangle(200,350,250,400); Rectangle(300,350,350,400); Rectangle(400,350,450,400);   Rectangle(50,400,100,450); Rectangle(150,400,200,450); Rectangle(250,400,300,450); Rectangle(350,400,400,450);   end.

Результат:

Несмотря на то, что белые ячейки мы не рисовали, код все равно громоздкий .

Поэтому лучше попытаться сделать то же самое с помощью циклов...

While, или цикл с предусловием

Как вы, наверное, уже поняли из названия, while — это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true; как только условие становится false, выполнение цикла прекращается.

While имеет формат:

while < условие> do <оператор 1>; {Пока … делай ….}

Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки — begin и end; .

Repeat, или цикл с постусловием

Repeat — полная противоположность while. Repeat — это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false; как только логическое выражение становится true, выполнение цикла прекращается.

Repeat имеет формат:

repeat { повторяй … }< оператор 1>;< оператор 2>;…until {до…} <условие>

Begin и end не требуются.

For, или цикл с параметром

For — это цикл, в котором тело выполняется заданное количество раз.

Существует две формы записи этого цикла

Первая форма:for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;После каждой итерации значение <счетчик1> будет увеличиваться на 1.<значение1> — это начальное значение счетчика. Это может быть переменная или число.<конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>, выполнение цикла прекратится.Если требуется написать несколько операторов в теле цикла, используем begin и end.И <счетчик1>, и <конечное_значение>, и <значение1> — переменные целого типа.Чаще всего в качестве счетчика используется переменная i.

Вторая форма:for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;После каждой итерации значение <счетчик2> будет уменьшатся на 1.<значение2> — это начальное значение счетчика.<конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.

Важно:

  1. Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
  2. Изменять значение счетчика внутри тела нельзя!

Нарисуем шахматную доску с помощью цикла:

uses GraphABC; var i,j: integer;   begin rectangle(50,50,450,450); // рамка   setbrushcolor(clBlack); // заливка for i:=1 to 8 do for j:=1 to 8 do if odd(i+j) then // если сумма индексов i+j - нечетная, то... Rectangle(i*50+50,j*50+50,i*50,j*50);   end.

Согласитесь, данный код проще и лаконичнее, чем предыдущий. И цикл for — не совсем обычный цикл, в нем нет логического условия. Другими словами , цикл с параметром — это дополнения синтаксиса языка программирования, которые не добавляют новых возможностей, а делают использование языка более удобным для человека.

Для полноты картины пронумераем шахматные клетки с помощью еще одного цикла:

for i:=0 to 7 do begin setbrushcolor(clwhite); TextOut(70+i*50,453,chr(97+i)); TextOut(70+i*50,33,chr(97+i)); // горизонталь TextOut(37,70+i*50,chr(56-i)); TextOut(453,70+i*50,chr(56-i)); // вертикаль end;

Результат:

Ещё один пример , но теперь c циклом while :

Код без цикла:

uses graphABC; begin setwindowsize(640,200); // зададим размер окна clearwindow(clBlack); Brush.Color :=clWhite;   // 1й ряд circle(20,20,20); circle(60,20,20); circle(100,20,20); circle(140,20,20); circle(180,20,20); circle(220,20,20); circle(260,20,20); circle(300,20,20); circle(340,20,20); circle(380,20,20); circle(420,20,20); circle(460,20,20); circle(500,20,20); circle(540,20,20); circle(580,20,20); circle(620,20,20);   // 2й ряд circle(20,60,20); circle(60,60,20); circle(100,60,20); circle(140,60,20); circle(180,60,20); circle(220,60,20); circle(260,60,20); circle(300,60,20); circle(340,60,20); circle(380,60,20); circle(420,60,20); circle(460,60,20); circle(500,60,20); circle(540,60,20); circle(580,60,20); circle(620,60,20);   // 3й ряд circle(20,100,20); circle(60,100,20); circle(100,100,20); circle(140,100,20); circle(180,100,20); circle(220,100,20); circle(260,100,20); circle(300,100,20); circle(340,100,20); circle(380,100,20); circle(420,100,20); circle(460,100,20); circle(500,100,20); circle(540,100,20); circle(580,100,20); circle(620,100,20);   // 4й ряд circle(20,140,20); circle(60,140,20); circle(100,140,20); circle(140,140,20); circle(180,140,20); circle(220,140,20); circle(260,140,20); circle(300,140,20); circle(340,140,20); circle(380,140,20); circle(420,140,20); circle(460,140,20); circle(500,140,20); circle(540,140,20); circle(580,140,20); circle(620,140,20);   // 5й ряд circle(20,180,20); circle(60,180,20); circle(100,180,20); circle(140,180,20); circle(180,180,20); circle(220,180,20); circle(260,180,20); circle(300,180,20); circle(340,180,20); circle(380,180,20); circle(420,180,20); circle(460,180,20); circle(500,180,20); circle(540,180,20); circle(580,180,20); circle(620,180,20); end.

Результат:

А теперь нарисуем с помощью while :

uses graphABC; var x,y,r:integer; begin setwindowsize(640,200); // зададим размер окна r:=20; // радиус y:=r; clearwindow(clBlack); while y<=windowheight-r do // пока "игрик" меньше высоты окна с учетом радиуса: begin x:=r; while x<=windowwidth-r do // пока "икс" меньше ширины окна с учетом радиуса делаем begin Brush.Color :=clWhite; // рисуем круги белым цветом circle(x,y,r); x:=x+2*r end; y:=y+2*r end; end.Результат:

grafika.me

Как нарисовать в паскале?

Язык программирования Turbo Pascal позволяет рисовать в графическом режиме на экране различные фигуры. С помощью точек, линий, дуг можно построить любой графический объект. Pascal использует растровый режим графики с разрешением экрана 640 х 480. Рисование заключается в задании графическим процедурам координат начальной и конечной точки выводимого объекта. Цвет объекта, толщина линий, как и их стиль, также задаются в качестве параметров графических процедур. Для рисования с помощью программных средств нужно подключить графический модуль Pascal.

Вам понадобится
  • Среда программирования Turbo Pascal
Инструкция
  • Разберите заданный объект для рисования на составляющие элементы. Выделите отдельные линии, дуги, окружности, прямоугольники и точки. Именно эти фигуры можно нарисовать с помощью процедур языка Turbo Pascal.
  • В самом начале программного кода подключите графический модуль. Для этого запишите строку вида: uses graph. Далее создайте целочисленные переменные для инициализации графического режима: var gdet, gm: integer.
  • В теле программы за ключевым словом begin проинициализируйте переменные, присвоив одной из них нулевое значение, а второй значение detect. Далее укажите запуск графического режима рисования, введите строку вида: initgraph(gdet, gm, ''). Очистите устройство для вывода графических данных: cleardevice.
  • Установите цвет фона для рисования и цвет линий рисуемых объектов. Используйте для этого процедуры SetBkColor(white) и SetColor(8). В скобках указывается устанавливаемый цвет. Всего в Pascal используется 16 цветов, и каждый из них задается либо цифрой, либо словом из специальной таблицы цветов.
  • Изобразите себе координатную сетку экрана, где ось х расположена слева направо, а ось у проходит сверху вниз. В начале данной системы координат, то есть в левом верхнем углу экрана, находится координата (0,0). Вычислите координаты нужного вам положения первого графического объекта. Все координаты для рисования фигур задавайте именно в данной системе.
  • Нарисуйте линию с помощью процедуры line(х,у,х1,у1), где координаты х, у являются точкой начала линии, а х1, у1 - ее концом. При необходимости поменяйте толщину или тип линии. Для этого используется процедура SetLineStyle(0,0,NormWidth). Первым параметром процедуры можно изменить линию, сделав ее штрихом, пунктиром – поменяйте данную цифру на 1 или 2. Третий параметр задает толщину линий. По умолчанию всегда установлен параметр NormWidth - тонкие линии, для толстых линий поставьте ThickWidth. Измененный тип линии будет рисоваться после вызова данной процедуры.
  • Поставьте точку на экране с помощью процедуры PutPixel(x, y, color), здесь х и у также координаты точки, а color - ее цвет. Перед рисованием замкнутой фигуры можно задать ее заливку. Для этого вызовите процедуру SetFillStyle (EmptyFill, 0), где первый параметр указывает на сплошную заливку фигуры, а второй – задает цвет заливки.
  • Прямоугольная фигура рисуется процедурой Rectangle(x,y,x2,y2) – координаты задают левый верхний и правый нижний углы фигуры. Для рисования круга напишите строку Circle(x, y, R), где x, y, R – координаты центра и радиус окружности все также в пикселях. Эллипс нарисовать сложнее, для этого используется намного больше параметров: Ellipse(x, y, BegA, EndA, RX, RY). Здесь x, y тот же центр эллипса, а BegA и EndA указывают угол, на котором нужно начинать эллиптическую дугу и заканчивать ее. Переменные RX, RY задают радиус эллипса по оси х и у соответственно.
  • Если у вас заданна фигура, рисование которой проще всего провести отдельными отрезками, используйте для этого процедуры MoveTo и LineTo. Сначала установите текущий курсор в нужную вам точку: MoveTo (х, у). Затем проведите из нее линию до следующей точки LineTo(х1, у1) и снова нарисуйте прямую линию LineTo(х2, у2) и так до тех пор пока не получите исходную фигуру.
  • В конце рисования в программном коде закройте графический режим строкой: closegraph. Завершите тело программы, как обычно, словом end. Теперь код можно компилировать и запускать на выполнение.
  • Оцените статью!

    imguru.ru


    Смотрите также