Скачать программы Все программы автора1. 15. 3. Рисование геометрических фигур1. 15. 3. 1. Построение заполненных фигурРяд графических процедур выполняет построение заполненных фигур - фигур с замкнутым контуром, автоматически заполняемых сразу после построения. По умолчанию заполнение производится сплошным белым цветом. Цвет и стиль (орнамент) заполнения можно устанавливать из стандартного набора BGI или определять самим. SetFillStyle(P, N); - процедура установки орнамента P=0, 1, . . . , 12 и цвета с номером "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:
Шестнадцатеричные цифры соответствуют двоичным тетрадам цифр:
Причем, двоичное число разбивается на тетрады цифр с конца числа, а шестнадцатеричное число получается заменой каждой тетрады соответствующей цифрой с добавлением в начале числа символа "$". Орнамент удобно задавать, используя переменные с начальным значением (типизированные константы), например: {оператор описания:} 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 - по вертикали. 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; Приведем пример программы, выводящей два прямоугольника с орнаментами пользователя (bukva_Y и Red_50), а затем демонстрирующей набор стандартных орнаментов на передней грани параллелепипедов: uses Graph; С onst bukva_Y: FillPatternType=($81, $C3, $66, $3C, $18, $18, $18, $18); Red_50: FillPatternType=($AA, $55, $AA, $55, $AA, $55, $AA, $55); var i, x1, y1, x2, y2, Gd, Gm : integer; Begin Gd:= Detect; InitGraph(Gd, Gm, '_'); SetFillPattern(Red_50, Red); { орнамент - 50% красных пикселов } Bar(250, 10, 350, 110); SetFillPattern(bukva_Y, Blue); { орнамент - синяя буква "Y" } Bar(340, 30, 440, 130); { стандартный набор из 12 орнаментов BGI выводим цветом с номером "11" } for i:=0 to 11 do begin SetFillStyle(i, 11); if i<6 then begin x1:=90 * i; y1:=150 end else begin x1:=90 * (i-6); y1:=270 end; x2:=x1+70; y2:=y1+80; Bar3d(x1, y1, x2, y2, 10, TopOn) end; ReadLn; CloseGraph End. Заполняя не черный экран орнаментом Red_50, можно получить новые цвета фона. Выбранным из стандартных или определенным орнаментом можно заполнить любую замкнутую область с границей цвета "N" оператором FloodFill(X, Y, N); Заполнение начинает производится из точки X, Y и ограничивается при достижении границы цвета с номером "N". Например: Rectangle(x1, y1, x2, y2); FloodFill((x1+x2) div 2, (y1+y2) div 2, Red); Если область не замкнута или цвет границы не равен "N", то заполнение "разольется" по экрану.
Практическое задание N 1. 54
1. С использованием оператора цикла нарисовать на экране 12 одинаковых заполненных различными стандартными орнаментами фигур ( в 3 ряда по 4 фигуры). По нажатию клавиши должен меняться вариант фигуры: 1. 1 Прямоугольник, 2. 1 Эллипс, 1. 2 Параллелепипед. 2. 2 Круг. Выполнить задание с использованием процедур рисования фигур без автоматического заполнения, а затем заполнить их. 2. Нарисовать 5 вложенных прямоугольников с увеличением размера на 20 пикселов в каждом направлении. Стиль заполнения для каждой фигуры определить буквами Вашего имени. 3. Нарисовать 5 соосных кругов разного цвета с уменьшением радиуса на 10 пикселов. Стиль заполнения для каждого круга определить его номером, т. е. цифрами 1, 2, 3, 4, 5. 4. Определить три орнамента заполнения: "снежинка", "иголки" с наклоном влево и вправо. Нарисовать из треугольников пять елок и заполнить их орнаментом "иголки". Заполнить экран орнаментом "снежинка". 5. Создать элемент орнамента с единицами (4 * 4) в центре. Нарисовать на экране картину "ночной город", используя фрагменты "звездного неба" и пять прямоугольников, заполненных орнаментом 4 * 4 разного цвета. 6. Используя исходные орнаменты из одной линии составить с использованием логических операций орнаменты цифр: 1, 6, 7 и букв: B, F, E. |