Графика
При работе с экраном в графическом режиме очень важным является то, что любая информация представляет собой совокупность пикселей. Каждый пиксель определяется своими координатами, т.е. положением относительно левого верхнего угла экрана. С помощью программ можно управлять светимостью и цветом любого пикселя, т.е. создавать любое изображение.
Графический режим ПК существенно отличается от текстового как по принципам функционирования, так и по возможностям.
Графика применяется практически во всех серьезных программных разработках, так как позволяет увидеть результаты расчетов в виде чертежей, графиков, иллюстраций в движении.
Подключение графической библиотеки при программировании
в среде Turbo Pascal производится оператором: Uses Graph
Изображения в PascalABC можно создавать с помощью модуля GraphABC, он подключается тоже после Uses .
Uses GraphABC;
Begin
End.
Уже сейчас можно запустить приложение и получить на экране графическое окно.
По умолчанию оно имеет размеры 640х480 пикселей и заголовок GraphABC.NET.
Операторы используемые в графике:
SetWindowHeight(h); - Устанавливает высоту графического окна
SetWindowWidth(w); - Устанавливает ширину графического окна
ClearWindow; - очищает графическое окно белым цветом.
ClearWindow(color); - очищает графическое окно указанным цветом.
SetPixel(x,y,color); - Закрашивает один пиксел с координатами (x,y) цветом color
LineTo(x,y); - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).
Line(x1,y1,x2,y2); - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).
SetPenColor(color); - устанавливает цвет пера, задаваемый параметром color.
Некоторые из цветов:
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Цвет также можно задать с помощью палитры RGB для это за место color пишется rgb(r,g,b): где r,b,g - числа от 0 до 255
SetPenWidth(n); - устанавливает ширину (толщину) пера, равную n пикселям.
Rectangle(x1,y1,x2,y2); - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).
FloodFill(x,y,color); - заливает область одного цвета цветом color, начиная с точки (x,y).
SetBrushColor(color); - устанавливает цвет кисти, заливка кистью распространяется на замкнутый контур, описание которого следует за процедурой установки цвета кисти.
Circle(x,y,r); - рисует окружность с центром в точке (x,y) и радиусом r.
Ellipse(x1,y1,x2,y2); - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).
SetFontName(‘name’);- устанавливает наименование шрифта.
SetFontColor(color); - устанавливает цвет шрифта.
SetFontSize(sz); - устанавливает размер шрифта в пунктах.
SetFontStyle(fs); - устанавливает стиль шрифта.
Стиль шрифта:
fsNormal – обычный;
fsBold – жирный;
fsItalic – наклонный;
fsBoldItalic – жирный наклонный;
fsUnderline – подчеркнутый;
fsBoldUnderline – жирный подчеркнутый;
fsItalicUnderline – наклонный подчеркнутый;
fsBoldItalicUnderline – жирный наклонный подчеркнутый.
Задача: нарисовать
Программа:
Program Seventh;
uses GraphABC;
Begin
MoveTo(200,200);
LineTO (300,140); lineTO (400,200);
LineTO (300,260); lineTO (200,200);
LineTo (400,200);
circle (160,200,40);
circle (440,200,40);
circle (440,200,40);
FloodFill (300,160,cllime);
FloodFill (300,230,clblue);
FloodFill (160,200,clred);
FloodFill (440,200,clyellow);
End.
Процедура
Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.
Применение:
- выполнение одинаковых действий в разных местах программы
- разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия
procedure <имя процедуры>(<формальные параметры>:integer);
begin
<тело процедуры>
end;
Порядок разработки процедуры:
- выделить одинаковые или похожие действия
- найти в них общее (размеры, форма, угол поворота) и отличия
- отличия записать в виде неизвестных переменных, они будут параметрами процедуры
Особенности:
- все процедуры расположены выше основной программы
- в заголовке процедуры перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться
- при вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке
- для каждого формального параметра после двоеточия указывают его тип
- если однотипные параметры стоят рядом, их перечисляют через запятую
- внутри процедуры параметры используются так же, как и переменные
- в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа
Задача нарисовать:
Программа:
Program Eighth;
uses crt,graphABC;
Procedure Tr(x,y,r,g,b:integer);
begin
MoveTo(x,y);
LineTo(x-50,y-86);
LineTo(x+50,y-86);
LineTo(x,y);
FloodFill(x,y-5,RGB(r,g,b));
end;
Begin
Tr (100,100,0,0,255);
Tr (200,100,255,0,0);
Tr (150,186,0,255,0);
End.
Рекурсия
Рекурсивный объект – это объект, определяемый через один или несколько таких же объектов.
Примеры:
Дерево Пифагора из N уровней – это ствол и отходящие от него симметрично два дерева Пифагора из N-1 уровней, такие что длина их стволов в 2 раза меньше и угол между ними равен 90.
Это дерево Пифагора из 6 уровней:
Другим примером может послужить предмет находящийся между двух зеркал: он будет повторяться в отражении несколько раз меняя свои размеры.
Рекурсивная процедура - это процедура вызывающая сама себя.
Задачи: Построить
Программа:
program qq;
uses GraphABC;
procedure Pifagor(x0, y0, a, L: real;
N: integer);
const k = 0.6;
var x1, y1: real;
begin
if N > 0 then begin
x1 := x0 + L*cos(a);
y1 := y0 - L*sin(a);
Line (round(x0), round(y0),round(x1), round(y1));
Pifagor (x1, y1, a+pi/3, L*k, N-1);
Pifagor (x1, y1, a+3*pi/30, L*k, N-1);
Pifagor (x1, y1, a-3*pi/30, L*k, N-1);
Pifagor (x1, y1, a-pi/3, L*k, N-1);
end;
end;
begin
Pifagor (250, 400, pi/2, 150,6);
end.
Но если немного изменить программу:
program qq;
uses GraphABC;
procedure Pifagor(x0, y0, a, L: real;
N: integer);
const k = 0.6;
var x1, y1: real;
begin
if N > 0 then begin
x1 := x0 + L*cos(a);
y1 := y0 - L*sin(a);
Line (round(x0), round(y0),round(x1), round(y1));
SetPenColor (clbrown);
Pifagor (x1, y1, a+pi/3, L*k, N-1);
SetPenColor (clyellow);
Pifagor (x1, y1, a+3*pi/30, L*k, N-1);
SetPenColor (clred);
Pifagor (x1, y1, a-3*pi/30, L*k, N-1);
SetPenColor (clgreen);
Pifagor (x1, y1, a-pi/3, L*k, N-1);
end;
end;
begin
Pifagor (250, 400, pi/2, 150,10);
end.
Hу как? Такая прелесть получилась так просто.
ДЗ, З а д а н и е :
Нарисовать 5000 звѐзд на небе.
(точки со случайными координатами)
|