Floodfill в паскале
Автор Xom9kot задал вопрос в разделе Компьютеры, Связь
Как в паскале залить цветом (любым) трапецию? и получил лучший ответ
Ответ от Diamond[активный]
Процедура FloodFill. Заполняет произвольную замкнутую фигуру, используя текущий стиль заполнения (узор и цвет) . Заголовок:
Procedure FloodFill(X,Y: Integer; Border: Word);
Здесь 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);
{Демонстрируем заливку маленького прямоугольника}
SetPillStyle(LtSlashFill,GetMaxColor);
Rectangle(0,0,8,20); FloodFill(1,1,GetMaxColor);
OutTextXY(10,25,'Press Enter..');
ReadLn; {Ждем нажатия Enter}
{Выводим окружности до тех пор, пока не будет нажата любая клавиша}
repeat
{Определяем случайный стиль заливки}
SetFillStyle(Random(12),Random(GetMaxColor+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.
Фух, вроде все, причем работает 🙂 если непонятно - пиши, помогу более детально.
P.S. не за что 🙂
Косплей и косплейщики.
"Костюмированная игра" - так переводится изобретенный в Японии англоязычный термин "cosplay" (Costumed Play). В первом приближении многие склонны относить косплей к бал-маскараду. Другие считают, что такое сравнение сродни представлению, что аниме - это "японские мультики", а манга - "детские комиксы". Принципиальные споры на этот счет, похоже, не закончатся никогда, но существует данное основателями жанра определение. Оно очевидно, но каждый в свою очередь пытается сформулировать его в более удобной и понятной форме.
Косплей - это своеобразный "театр" персонажей аниме, манги, японских видеоигр, а также исторических японских костюмов (кимоно, самурайские доспехи и т. д. ) . Иными словами, традиционное определение косплея подразумевает исключительно японский антураж.
Паскаль. Анимация. Как по нажатию на кнопку заставить машину ехать в обратную сторону?
program Mashina;
uses
GraphABC;
procedure CreateCarPic(var p:
подробнее...
составить рисунки в паскаль abc. ПОМОГИТЕ!)
Вот программа с елкой:
Uses GraphABC;
Begin
SetWindowSize(600,400);
line(250,100,
подробнее...
как в паскале ABC нарисовать круг?
uses graphabc;
var a,b,c,i,count:integer;
begin
floodfill(1, 1, clblue);
подробнее...
Как в Паскале АВС нарисовать дом? Помогите пожалуйста, срочно надо... =(
Program kukareku;
uses
подробнее...