Автор работы: Пользователь скрыл имя, 16 Сентября 2009 в 13:41, Не определен
Учебник по программированию
вычерчивает трехмерный закрашенный прямоугольник.
При этом используются тип и цвет закраски, установленные с помощью процедуры SetFillStyle. Параметр Depth представляет собой число пикселов, задающих глубину трехмерного контура.
Чаще всего его значение принимают равным четверти ширины прямоугольника:
Depth:=(X2 - X1) DIV 4.
Параметр
Top определяет нужно ли строить над прямоугольником
вершину (Top:=True) или нет (Top:=False).
Процедура вычерчивания окружности текущим цветом имеет следующий вид:
Circle(X,Y,Radius: word),
где
X, Y - координаты центра окружности, а Radius
- радиус.
Что бы создать закрашенный эллипс, используется процедура
FillEllipse(X,Y:integer;
где
X, Y - центр эллипса, xR и yR - горизонтальная
и вертикальная оси. Заполнитель устанавливается
процедурой SetFillStyle.
В
следующем примере приведена
программа, рисующая на желтом фоне синего
снеговика.
Program SnowMan;
Uses Graph, Crt;
Var DriverVar, ModeVar :integer;
c
Begin
DriverVar:=Detect;
InitGraph(DriverVar, Modevar, ‘ ’);
SetBkColor(14); SetColor(1);
Circle(300,300,50);
Circle(300,215,35);
Circle(300,160,20);
Circle(300,180,5); Circle(290,140,5); Circle(310,140,5);
Line(335,215,370,200); Line(265,215,230,200);
c:=readkey;
SetBkColor(0); SetColor(GetMaxColor);
CloseGraph;
End.
Программы, которые строят, перемещают и изменяют форму различных изображений на экране, называются анимационными. Такие программы, как правило, требуют применения достаточно сложных алгоритмов и используют большой объем памяти для хранения данных.
В основе перемещения какого-либо объекта на экране лежит следующий алгоритм:
При частом выводе объекта с небольшими смещениями создается иллюзия движения.
Существует большое количество анимационных методов, различающихся способами вывода или построения движущихся объектов, источниками поступления данных об изображении и т. п. Простейший анимационный метод заключается в следующем:
- определенным цветом выводится рисунок;
- рисунок формируется
на том же месте цветом, совпадающим
с цветом фона. Это вызывает
исчезновение рисунка;
- рисунок выводится
на другом месте своим
В качестве примера приведем программу, выводящую мяч (окружность красного цвета), катящийся по горизонтальной линии и отражающийся от вертикальных стенок (левая и правая границы экрана).
Program Ball;
Uses Graph, Crt;
Label 10,100;
Const bxi=300; byi=200; bri=10; bci=4;
Var DriverVar, ModeVar :integer;
xm,ym :integer;
bx,by,br,bc
dx
Begin
DriverVar:=Detect;
InitGraph(DriverVar, Modevar, ‘ ’);
xm:=GetMaxX; ym:=GetMaxY;
bx:=bxi; by:=byi; br:=bri; bc:=bci;
dx:=+1;
SetColor(bc);
Circle(bx,by,br);
10: SetColor(GetBKColor); Circle(bx,by,br);
bx:=bx+dx; by:=by;
if bx>=xm-br then dx:=-1;
if bx<=0+br then dx:=+1;
SetColor(bc); Circle(bx,by,br);
if KeyPressed then goto 100;
goto 10;
100:SetColor(GetMaxColor);
CloseGraph;
End.
Процедуры
для рисования
фигур.
PutPixel(X, Y:Integer; Pixel:Word);
Рисует на экране точку с координатами (X, Y) цветом Pixel.
Line(X1, Y1, X2, Y2:Integer);
Рисует на экране отрезок прямой от точки (X1, Y1) до точки (X2, Y2).
Rectangle(X1, Y1, X2, Y2:Integer);
Рисует на экране прямоугольник с верхним левым углом в точке (X1, Y1) и нижним правым углом в точке (X2, Y2).
Bar(X1, Y1, X2, Y2:Integer);
Рисует на экране залитый прямоугольник с верхним левым углом в точке (X1, Y1) и нижним правым углом в точке (X2, Y2). Стиль и цвет заливки задаются процедурой SetFillStyle.
Bar3D(X1, Y1, X2, Y2:Integer; Depth:Word; Top:Boolean);
Рисует на экране параллелепипед с залитой передней гранью. Глубина фигуры - Depth. Если Top равно TopOn , то параллелепипед рисуется с верхней гранью, если TopOff, то без верхней грани. Стиль и цвет заливки передней грани задаются процедурой SetFillStyle.
Circle(X, Y:Integer; Radius:Word);
Рисует на экране окружность с центром в точке (X, Y) радиусом Radius.
Ellipse(X, Y:Integer; StAngle, EndAngle:Word; XRadius, YRadius:Word);
Рисует на экране эллиптическую дугу с центром в точке (X, Y), радиусами XRadius, YRadius. StAngle, EndAngle - начальный и конечный углы.
Arc(X, Y:Integer; StAngle, EndAngle:Word; Radius:Word);
Рисует на экране дугу окружности с центром в точке (X,Y), радиусом Radius. StAngle, EndAngle - начальный и конечный углы.
FillEllipse(X, Y:Integer; XRadius,YRadius:Word);
Рисует на экране залитый эллипс с центром в точке (X, Y), радиусами XRadius, YRadius. Стиль и цвет заливки задаются процедурой SetFillStyle.
Sector(X, Y:Integer; StAngle, EndAngle:Word; XRadius, YRadius:Word);
Рисует на экране закрашенный сектор эллипса с центром в точке (X, Y), радиусами XRadius, YRadius. StAngle, EndAngle - начальный и конечный углы. Стиль и цвет заливки задаются процедурой SetFillStyle.
PieSlice(X, Y:Integer; StAngle, EndAngle:Word; Radius:Word);
Рисует на экране
закрашенный сектор круга с центром
в точке (X, Y), радиусом Radius. StAngle, EndAngle
- начальный и конечный углы. Стиль и цвет
заливки задаются процедурой SetFillStyle.
Другие процедуры.
ClearDevice;
Очищает экран в графическом режиме.
CloseGraph;
Закрывает графический режим.
SetColor(Color:Word);
Устанавливает новый цвет для рисования.
SetLineStyle(LineStyle:Word; Pattern:Word; Thickness:Word);
Устанавливает стиль и толщину линий. Если Thickness равно ThickWidth, то линии будут толстыми, если NormWidth, то обычными.
SetFillStyle(Pattern:Word; Color:Word);
Устанавливает стиль и цвет заливки. Если Pattern равно UserFill, то используется определенный пользователем стиль, описанный процедурой SetFillPattern.
SetFillPattern(Pattern:
Устанавливает определяемый пользователем стиль и цвет заливки. FillPatternType=Array [1..8] of Byte;
FloodFill(X, Y:Integer; Border:Word);
Заливает область вокруг точки (X, Y) до линии цвета Border, используя текущий стиль и цвет заливки.
SetTextStyle(Font, Direction:Word; CharSize:Word);
Устанавливает используемый шрифт, его направление и размер. Направление соответствует значению переменной Direction и может быть горизонтальным (Direction=0) или вертикальным (Direction=1). Шрифт может быть как одним из стандартных, так и определенный пользователем (с помощью функции InstallUserFont).
SetUserCharSize(MultX, DivX, MultY, DivY:Word);
Устанавливает ширину букв используемого шрифта в MultX/DivX раз больше, а высоту в MultY/DivY раз больше.
OutTextXY(X, Y:Integer; TextString:String);
Выводит текст TextString
на экран от точки (X, Y).