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 Все права принадлежат авторам размещенных материалов.
|