Графика, графика, графика! Часть 1. Введение. Pascal abc программа для рисования


Графика, графика, графика! Часть 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

Графика, графика, графика! Часть 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

Графика, графика, графика! Часть 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


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