Оқулық Қазақстан Республикасы Білім жəне ғылым министрлігі бекіткен Алматы, 2011 1


FloodFill процедурасы ағымдағы толтыру стилін (өрнек жəне түс) қолданып, тұйық фигураның ішін бояйды. Тақырыбы: Procedure



бет122/210
Дата06.01.2022
өлшемі4,42 Mb.
#16437
түріОқулық
1   ...   118   119   120   121   122   123   124   125   ...   210

FloodFill процедурасы ағымдағы толтыру стилін (өрнек жəне түс) қолданып, тұйық фигураның ішін бояйды. Тақырыбы:


Procedure FloodFill(X,Y: Integer; Border: Word);


209

мұндағы X, Y – тұйық фигураның ішіндегі кез келген нүкте координатасы; Border – шекара сызығының түсі.
Егер фигура тұйық болмаса, онда бүкіл экран боялады. Процедурадағы тұйық фигураның шекарасын қарау алгоритмі-
нің жетік емес екендігін есте сақтау керек. Егер қатарынан екі бос жол шығарылатын болса, онда бояу тоқтатылады. Мұндай жағдай көбіне LtSlashFill типін қолданып, кішігірім фигураны бояғанда пайда болады. Турбо Паскаль тілінің фирмалық нұсқауларында FloodFill процедурасының орнына, мүмкіндігінше, FillPoly про-цедурасын қолдануға кеңес берілген.
Келесі программа кездейсоқ дөңгелектер ішін бояуды көр-сетеді. Алдымен экранда терезе салынып, оның ішінде тікбұ-рышты бояйды. Тікбұрыштың жартысы боялмай қалады, себебі программа жұмысын тоқтатып, Enter пернесінің басылуын кү-теді. Сонан кейін, экранға кездейсоқ дөңгелектер салынып, кез келген перне басылғанша боялады. Егер LtSlashFill типінің ор-нына SlashFill типі қолданылса, тікбұрыш толығымен боялады. Егер программа өте ұзақ жұмыс істейтін болса, ол тұрып қалуы мүмкін, бұл көрсетілген алгоритмнің жетік еместігін дəлелдейді.
uses Graph, CRT;
var
d,r,е,х,у,с: Integer; begin
{Графиканы іске қосамыз} d:=Detect; InitGraph(d,r,''); e:=GraphResult;
if e <> grOk then WriteLn(GraphErrorMsg(e)) else
begin
{Терезе саламыз}
х:=GetMaxX div 4; у:=GetMaxY div 4; Rectangle(х,у,3*x,3*y); SetViewPort(x+1,y+1, 3*x-1,3*y-
1,ClipOn);
{Кішкене тікбұрыштың боялуын көрсетеміз }


210

SetPillStyle(LtSlashFill,GetMaxColor);
Rectangle(0,0,8,20); FloodFill(1,1,GetMaxColor); OutTextXY(10,25,'Press Enter...');
ReadLn; { Enter пернесінің басылуын
күтеміз}
{Кез келген перне басылғанша дөңгелектер са-
ламыз}
repeat
{Кездейсоқ бояу стилін анықтаймыз} SetFillStyle(Random(12),Random(GetMaxCol
or+1));
{Дөңгелектің центрінің координатасы мен түсін береміз}
х:=Random (GetMaxX div 2); у:=Random (GetMaxY div 2); с:=Random (succ(GetMaxColor));
SetColor(c);
{Дөңгелекті шығарып, бояймыз}
Circle(x, у,Random(GetMaxY div 5)); FloodFill (x,у,с); until KeyPressed;
if ReadKey=#0 then
x:=ord(ReadKey);
CloseGraph;
end
end.



Достарыңызбен бөлісу:
1   ...   118   119   120   121   122   123   124   125   ...   210




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет