Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2010, 20:42   #11
NSvirus
пропагандирую жизЪ
Форумчанин
 
Аватар для NSvirus
 
Регистрация: 19.03.2007
Сообщений: 950
По умолчанию

собстно сообразил и сделал нечто - для Паскаля и без массива и стека.
Кому нужно:

Код:
program abc;
uses
 Graph;
Var
 grD,grM,res:integer;
 n,t,zv:integer;
 x1,x2,y1,y2:integer;
 a:array[1..250,1..250] of boolean;
Begin
 grD:=detect;
 initGraph (grD,grM,'');
 setcolor(5);
 line(20,20,70,80);
 line(70,80,90,20);
 line(90,20,60,60);
 line(60,60,70,40);
 line(70,40,20,20);
 putpixel(30,30,10);
  for t:=20 to 110 do
   begin
     for n:= 20 to 120  do
       begin
         zv:=getpixel(n,t);
         if ((zv=10)and(a[n,t]=false)) then
          begin
           x1:=getpixel(n-1,t);
           x2:=getpixel(n+1,t);
           y1:=getpixel(n,t-1);
           y2:=getpixel(n,t+1);
           if x1=0 then putpixel(n-1,t,10);
           if x2=0 then putpixel(n+1,t,10);
           if y1=0 then putpixel(n,t-1,10);
           if y2=0 then putpixel(n,t+1,10);
           if ((x1=0) or (x2=0) or (y1=0) or (y2=0)) then begin  a[n,t]:=true; t:=1; end;
          end;
       end;
   end;
   readln;
end.
//здесь нужно учитывать одну особенность: если в заданном интервале будет точка цвета заливки за фигурой которую нужно залить, то все что находится за фигурой, будет закрашено))


А как выполнить закраску рекурсией, что-то совсем не понял(
Посторонним В.

Последний раз редактировалось NSvirus; 14.09.2010 в 21:26. Причина: оптимизировал на скорость путем введения массива истины.
NSvirus вне форума Ответить с цитированием
Старый 14.09.2010, 21:08   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от NSvirus
А как выполнить закраску рекурсией, что-то совсем не понял(
В простейшем случаи:

Код:
процедура Заливка (х, у);
начало
  если Точка[х,у] = цвет_заливаемой_области тогда
  начало
    Точка[х,у] := цвет_заливки;
    Заливка (х + 1, у);
    Заливка (х - 1, у);
    Заливка (х, у + 1);
    Заливка (х, у - 1);
  конец;
конец;
Но таким образом очень быстро переполнится стек (если область заливки достаточно большая). Потому можно рисовать не по 1 точки, а сразу целые горизонтальные линии, что и делается в моем примере выше.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод картинки попиксельно SmilingBull Мультимедиа в Delphi 6 11.01.2011 02:01
Рисовать попиксельно Ooops Софт 2 15.12.2009 10:00
Сравнение попиксельно зоны рабочего стола с указанным *.bmp Travolta Общие вопросы .NET 1 02.12.2008 13:01
Как из .BMP считать попиксельно OrdJONY Мультимедиа в Delphi 7 17.08.2008 15:46
Нужно решить и объяснить задачу "В режиме точечной графики попиксельно вывести фразу" Eyeless Фриланс 3 10.01.2008 10:56