Для задания углов используется полярная система координат (см. рис.6.2).
Рис.6.2. Полярная система координат
Процедура вычерчивания окружности текущим цветом имеет следующий формат:
Circle (X, Y, Radius :word);
где X, Y – координаты центра окружности,
Radius – ее радиус.
Например.
SetColor(Green);
Circle (450, 100, 50);
обеспечит вывод окружности зеленого цвета с радиусом 50 пикселей и центром в точке (450, 100).
Для вычерчивания дуги используется процедура
Arc(X, Y : integer; StAngle, EndAngle, Radius : word);
где X, Y – координаты центра окружности,
StAngle и EndAngle – начальный и конечный угол,
Radius – ее радиус.
Если StAngle=0 и EndAngle=359, то вычерчивается полная окружность.
Например.
SetColor(Red);
Arc (450, 100, 0, 90, 50);
позволит вывести дугу красного цвета от 0 до 90 градусов.
Для построения эллиптических дуг предназначена процедура
Ellipse(X,Y : integer; StAngle, EndAngle : word, xR, yR : word);
где X, Y – центр эллипса в линейных координатах,
xR, yR – горизонтальные и вертикальные оси.
Если StAngle=0 и EndAngle=360, то вычерчивается полный эллипс.
Например.
SetColor(LightCyan);
Ellipse (100, 100, 0, 360, 30, 50);
выводит эллипс ярко-голубого цвета, причем фон внутри эллипса совпадает с фоном экрана.
Чтобы создать закрашенный эллипс используется специальная процедураFillEllipse, а заполнитель устанавливается процедурами SetFillStyle и SetColor.
FillEllipse(X,Y : integer; xR, yR : word);
Например.
SetFillStyle(10, 2); {Установка стиля заполнения}
SetColor(LightCyan); {Цвет для вычерчивания эллипса}
Ellipse (100, 100, 0, 90, 50);
В этом фрагменте эллипс вычерчивается ярко-красной кривой и заполняется приведенной в таблице 6.3 стандартной маской 10 (редкие точки) зеленого цвета.
Для создания и заполнения сектора в эллипсе используется процедура
Sector(X,Y : integer; StAngle, EndAngle, xR, yR : word);
где X, Y – центр,
xR, yR – горизонтальные и вертикальные радиусы.
Сектор вычерчивается от начального угла StAngle до конечного угла EndAngle текущим цветом и заполняется стилем, заданной процедурой SetFillStyle.
Например.
SetFillStyle(11, 9);
SetColor(13);
Sector(300, 150, 180, 135, 60, 70);
6.3 РАБОТА С ТЕКСТОМ
Выводимые на экран изображения обычно сопровождаются пояснительным текстом. В графических режимах для этого используются процедуры OutText и OutTextXY.
Процедура OutText выводит строку текста, начиная с текущего положения курсора.
OutText(Textstring : string)
где Textstring – константа или переменная типа string.
Например,OutText(‘Вводите данные: ‘);
Явный недостаток этой процедуры – нельзя указать произвольную точку начала вывода. Его можно устранить с помощью процедуры OutTextXY.
выводит сообщение “Для продолжения нажмите любую клавишу”, начиная с точки 60, 100.
Вывод текста в графических режимах может осуществляться самыми различными стандартными и пользовательскими шрифтами. Различают два типа шрифтов: растровые и и векторные. Растровый задается матрицей точек, а векторный – рядом векторов, составляющих символ.
По умолчанию после инициализации графического режима устанавливается шрифт DefaultFont, который, как правило, является шрифтом, используемым установленным драйвером клавиатуры. Активизация нужного шрифта осуществляется с помощью процедуры
SetTextStyle(Font : word; Direction : word, CharSize : word);
где Font – выбранный шрифт,
Direction – направление (горизонтальное или вертикальное),
CharSize – размер выводимых символов.
Возможные значения двух первых параметров представлены в таблице 6.6.
Пример. Нарисовать эмблему. В левой верхней части графического экрана на черном фоне нарисовать голубой квадрат, а в нем – черный круг, закрашенный желтым цветом. В центре эмблемы черными буквами написать слово «АГНИ».
program Emblema;
uses Crt, Graph;
var driver, mode : integer;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
setbkcolor(0);
setcolor(3);
rectangle(100, 0, 300, 200);
setfillstyle(1, 3);
floodfill(200, 100, 3);
setcolor(14);
circle(200, 100, 100);
setfillstyle(1, 14);
floodfill(200, 100, 14);
setcolor(0);
circle(200, 100, 100);
settextstyle(0, 0, 3);
outtextxy(135,100, ‘АГНИ‘);
readln
end.
Пример. Нарисовать разными цветами десять концентрических окружностей с общим центром в точке с графическими координатами (320; 240), и описать вокруг них красный прямоугольник.
program Circle10;
uses Crt, Graph;
var driver, mode, r : integer;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
r:=10; {радиус первой окружности 10 пикселей}
while r<=100 do
begin
setcolor(random(15));
circle(320, 240, r)
r:= r+10
end
setcolor(4);
rectangle(220, 140, 420, 340);
readln
end.
Пример. Написать программу рисования графика функции y=2Sin(2x)+1 на отрезке[0;2p], протабулировав функцию с шагом h=0,1.
Program GrafikSin;
uses Crt, Graph;
const a=0; b=2*pi;
h=0.1; h1=5;
x0=60; y0=240; M=50;
var driver, mode, x1, y1 : integer;
x, y : real;
function f(x:real) : real;
begin
f:=2*sin(2*x)+1
end;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
setcolor(14);
setbkcolor(1);
line(20, y0, 600, y0); {Координатная ось х}
line(x0, 440, x0, 20); {Координатная ось y}
x:=a;
x1:=x0 + trunc(M*x);
{x, y – математические координаты}
y:=f(x);
y1:=y0 - trunc(M*y);
{x1, y1 – графические координаты}
moveto(x1, y1);
setcolor(15);
while x<=b do
begin
y:=f(x);
y1:=y0 - trunc(M*y);
lineto(x1, y1);
x1:= x1+h1;
x:= x+h;
end
readln
end.
6.4 ПОНЯТИЯ ОБ АНИМАЦИИ
Чередование засвечиваний и гашений изображения используют для имитации движения этого изображения на экране. Перед очередным засвечиванием объект необходимо переместить в направлении его движения. Движение изображения на экране называют анимацией.
Для имитации движения объекта на экране нужно выполнить такой циклический алгоритм:
1. Нарисовать объект в нужной точке, сделать паузу.
2. Удалить объект, закрасив его цветом фона.
3. Изменить координаты объекта.
4. Возвратиться к пункту 1.
Пример. Изобразить движение солнца на голубом небе в горизонтальном направлении.