Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[28]

for i:= 1 to ay do

if GetPixel(xc, yc+(r+i)*zy) > 0 then { удар о горизонтальную стенку }

begin dy:= -dy; i2:=1; break end;

if (i1+i2 = 0) then for i:= 1 to ax do for k:= 1 to ay do if (GetPixel(xc+(r+i)*zx, yc+(r+k)*zy)>0) then { удар во внешний угол }

begin dy:= -dy; dx:= -dx; break end;

SetColor( 0); Circle(xc, yc, r);{ стирание мяча }

xc:= xc+dx; yc:= yc+dy;{ приращение координат }

SetColor(14); Circle(xc, yc, r){ рисование мяча }

Until Keypressed;

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

Операторами Rectangle рисуется лабиринт, образованный прямоугольником, содержащим два вложенных в него прямоугольника. Внутри лабиринта начинается перемещение окружности (мячика) с центром (XC, YC) и радиусом "r". Принцип движения мяча: рисование, задержка, рисование цветом фона (стирание), приращение координат в цикле. По цвету пиксела анализируется положение края мяча относительно границ лабиринта (вертикальной и горизонтальной), а также внешний угол. Если мячик "достигает" границы, то соответствующее приращение координат изменяет знак. Момент смены направления движения озвучен.

Практическое задание N 1. 53

Модифицировать программу "мячик в коробке":

1.Задать лабиринт в виде прямоугольника, содержащего три вытянутых прямоугольника со стенками разного цвета. Частота звука при отражении мяча от стенки должна зависеть от цвета стенки.

2.Задать лабиринт в виде прямоугольника содержащего две наклонные линии. чивать на 0.02,с. задержку движения мяча после каждого удара о стенку.

3.Запрограммировать движение двух мячей разного цвета в лабиринте.

Замедлять движение мячей, увеличивая задержку на 0.001,с. после каждого шага рисования мячей.

1. 15. 3. Рисование геометрических фигур

1. 15. 3. 1. Построение заполненных фигур

Ряд графических процедур выполняет построение заполненных фигур - фигур с замкнутым контуром, автоматически заполняемых сразу после построения. По умолчанию заполнение производится сплошным белым цветом. Цвет и стиль (орнамент) заполнения можно устанавливать из стандартного набора BGI или определять самим.

SetFillStyle(P, N); - процедура установки орнамента P=0, 1, . . . , 12 и -1 цвета с номером "N" для заполняемых фигур.

P = 0 - сплошное заполнение цветом фона, при этом значение "N" игнорируется, P = 1 - сплошное заполнение цветом с номером "N",


P = 2. . . 11 - стандартный набор орнаментов BGI, P = 12 - орнамент и цвет определяет пользователь.

SetFillPattern(PP, N);

процедура установки орнамента пользователя PP и цвета с номером "N" для заполняемых фигур.

Параметр PP имеет тип FillPatternType или array [1. . 8] of byte. Байт состоит из восьми битов и соответствует ряду из 8 пикселов, т. е. параметр РР определяет элемент орнамента размером 8*8 пикселов (восемь рядов по восемь пикселов). Если бит равен 1, то пиксел высвечивается заданным цветом, если бит равен 0 - текущим цветом фона.

Пример орнамента в виде буквы Y:

элемент орнамента

двоичные числа

шестнадцатеричные числа

1 2 3 4 5 6 7 8

Шестнадцатеричные цифры соответствуют двоичным тетрадам цифр:

Причем, двоичное число разбивается на тетрады цифр с конца числа, а шестнадцате-ричное число получается заменой каждой тетрады соответствующей цифрой с добавлением в начале числа символа "$".

Орнамент удобно задавать, используя переменные с начальным значением (типизированные константы), например: {оператор описания:}

Const Bukva Y: FillPatternType=($81,$C3,$66,$3C,$18,$18,$18,$18 );

{оператор выполнения:} SetFillPattern(Bukva Y, 4);

Можно добавлять один орнамент к другому используя логические операции, например, A и B - исходные орнаменты, Z - результирующий орнамент. Тогда: Z:= A and B; - орнамент из совпадающих единичных частей исходных орнаментов, Z:= A or B; - орнамент с добавлением единичных частей исходных орнаментов, Z:= A xor B; - орнамент из несовпадающих единичных частей исходных орнаментов, Z:= not A; - орнамент инверсный (обратный) к исходному орнаменту.


Z:= A xor A; - обнуление, Z:= A xor (not A); - сплошное заполнение орнамента.

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

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

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

Sector(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;

Приведем пример программы, выводящей два прямоугольника с орнаментами пользователя (bukva Y и Red 50), а затем демонстрирующей набор стандартных орнаментов на передней грани параллелепипедов:

$18, $AA,

$18, $55,

$18, $AA,

$18) $55)

uses Graph;Const

bukva Y: FillPatternType=($81, $C3, $66, $3C,

Red 50: FillPatternType=($AA, $55, $AA, $55,

var i, x1, y1, x2, y2, Gd, Gm : integer; Begin Gd:= Detect; InitGraph(Gd, Gm, ); SetFillPattern(Red 50, Red); Bar(250, 10, 350, 110); SetFillPattern(bukva Y, Blue); Bar(340, 30, 440, 130);

{ стандартный набор из 12 орнаментов BGI выводим цветом с номером "11" }

for i:=0 to 11 do begin SetFillStyle(i, 11);

{ орнамент - 50% красных пикселов } { орнамент - синяя буква "Y" }



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53]