Здавалка
Главная | Обратная связь

Circle(X, Y, R); - построить окружность с центром X, Y и радиусом R.



Line(x1, y1, x2, y2); - построить отрезок прямой линии от точки с координатами x1, y1 к точке с координатами x2, y2.

Rectangle(x1, y1, x2, y2); - построить прямоугольникс левым верхним углом в точке с координатами x1, y1 и правым нижним углом в точке с координатами x2, y2 (стороны параллельны краям экрана ).

GetPixel(X, Y);- функция возвращает цвет пиксела с координатами X, Y.

Координаты точек имеют тип Integer, остальные параметры - тип Word.

Значения координат задаются в пределах0 £X£ GetmaxX; 0 £Y£ GetmaxY;

Перемещение курсора за пределы экрана игнорируется.

Очистить графический экран можно процедурами: ClearDevice; (без изменения установленных параметров), либоGraphDefaults;(устанавливаются параметры, принятые по умолчанию).

Рассмотрим пример фрагмента программы:

Uses Crt, Graph;{ раздел описаний для фрагментов программ N1- N8 }

const N= 500;

var X, Y, Vx, Vy, P: array[1..N] of integer; ch: char;

Gd, Gm, Gx, Gy, x1, y1, x2, y2, xc, yc, dx, dy, r: integer;

i1, i2, zx, zy, ax, ay, i, k: integer;

begin{ инициализация графики для фрагментов программ N1- N8 }

Gd:=Detect;

InitGraph(Gd,Gm,'C:\tp7\bgi');

Randomize; Gx:=GetMaxX; Gy:=GetMaxY;

{-----------------------------------------------------------------

Фрагмент N 1 программы "небо в алмазах"( рисование пикселов ). }

SetColor(0);

Repeat

i:= 9 + random(7);

xc:= random(Gx);

yc:= random(Gy);

PutPixel(xc, yc, i);

Circle(xc, yc, 3)

Until KeyPressed;

{---------------------------------------------------------------- }

While KeyPressed do ch:= ReadKey;{ очистка буфера клавиатуры }

CloseGraph;

end. { закончить работу в графическом режиме }

Фрагмент N 3 программы "снег"

( рисование движущегося массива пикселов с остановкой на границе экрана ).

----------------------------------------------------------------- }

for i:=1 to 200 do

Begin

X[i]:= random(Gx);

Y[i]:= random(Gy div 2);

PutPixel(X[i],Y[i],15)

end;

Repeat

for i:=1 to 200 do

Begin

if (Y[i]<Gy) and (GetPixel(X[i],Y[i]+1)=0){ анализ границы и цвета пиксела }

Then begin

PutPixel(X[i],Y[i],0); Y[i]:=Y[i]+1;

PutPixel(X[i],Y[i],15)

end{ движение пикселов }

else begin{ образование новых пикселов }

Y[i]:= random(Gy div 10);

X[i]:= random(Gx); PutPixel(X[i], Y[i], 15)

End

End

Until keypressed;

{-----------------------------------------------------------------}

Сначала генерируется набор координат (X[i], Y[i]) в верхней половине экрана и выводятся белые точки (снежинки). Затем каждая точка гасится, смещается по оси Y на 1 пиксел и высвечивается вновь. Если точка по ходу движения достигнет нижнего края экрана или встретит "преграду" (точку не черного цвета), то она не гасится и генерируется новая точка в верхней части экрана.

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

Bar(X1, Y1, X2, Y2); - построить заполненный прямоугольникс заданными

координатами левого верхнего (X1, Y1) и правого нижнего (X2, Y2) углов. Аналог процедуры: Rectangle(X1, Y1, X2, Y2);.

Bar3d(X1,Y1,X2,Y2,d,t);-построить параллелепипед с заполненной передней гранью. Координаты углов: (X1, Y1), (X2, Y2), глубина "d". Переменная "t" типа boolean задает вывод верхней грани. При t=TopOn(true) верхняя грань показывается, при t=TopOff (false) - нет.

FillEllipse(X,Y,RX,RY);- построитьзаполненный эллипсс центром в точке (X, Y) и радиусами ( полуосями ) : RX - по горизонтали, RY - по вертикали.

Sector(X, Y, A1, A2, RX, RY);- построитьзаполненный сектор эллипса.A1 и A2 - начальный и конечный углы (в градусах), отсчитываемые против часовой стрелки относительно направления оси Х. Аналог процедуры: Ellipse(X, Y, A1, A2, RX, RY); строит сектор эллипса без автоматического заполнения.

PieSlice(X,Y,A1,A2,R);- построить заполненный сектор круга с центром в точке (X, Y) и радиусом R. Аналог процедуры:Arc(X,Y,A1,A2,R);- строит дугу окружности.

FillPoly(N, M);- заполнить произвольную плоскую фигуру с границей, описанной массивом точек. N - число точек границы, М - параметр - переменная типа PointType, определяемая в модуле Graph в виде: TYPE PointType = Record x, y: Integer End;

В программе массив можно описать операторами: Const N=100; Var M: array[1..N] of PointType;

Присвоение значений можно провести в цикле:

For i:=1 to 3 do begin M[i].x:=random(95); M[i].y:=random(95) end;

Выбранным из стандартных или определенным орнаментом можно заполнить любую замкнутую область с границей цвета "N" оператором

FloodFill(X, Y, N);

Заполнение начинает производится из точки X, Y и ограничивается при достижении границы цвета с номером "N". Например: Rectangle(x1, y1, x2, y2); FloodFill((x1+x2) div 2, (y1+y2) div 2, Red); Если область не замкнута или цвет границы не равен "N", то заполнение "разольется" по экрану.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.