Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Реализация алгоритма с затравкой


Автор: katbka25 28.10.2010, 19:38
Это сами фигуры Лиссажу. Тут вроде все нормально.

Код

uses Graph,crt;

const
a=80;w1=2;w2=10;
var
driver,mode,x1,y1,x2,y2,t,color:integer;
procedure Figure(w1,w2:integer);
begin
 driver:=9;
 mode:=0;
 initgraph(driver,mode,'');
 for t:=1 to 1000 do
   begin
   setcolor(white);
   x1:=100+round(a*cos(w1*t / (180/Pi)));
   y1:=100+round(a*sin(w2*t / (180/Pi)));
   x2:=100+round(a*cos(w1*(t+1) / (180/Pi)));
   y2:=100+round(a*sin(w2*(t+1) / (180/Pi)));
   line(x1,y1,x2,y2);
   end;
end;

А вот с заливкой каждого сегмента у меня проблемы... Как определять принадлежит ли данная точка области фигуры, как определить что мы закрашиваем другую область?
Пишу так, но тут явно все коряво:

Код

procedure Fill(x,y,color1,color2:integer);
begin
 driver:=9;
 mode:=0;
 initgraph(driver, mode,'');
 if((GetPixel(x,y) < > color1)and(GetPixel(x,y) < > color2))
 then
  begin
  PutPixel(x,y,color2);
  Fill(x+1,y,color1,color2);
  Fill(x,y+1,color1,color2);
  Fill(x-1,y,color1,color2);
  Fill(x,y-1,color1,color2);
  end;
end;

Заранее спасибо за помощь.

Автор: Sanaff 29.10.2010, 12:33
Есть алгоритмы заливки замкнутой фигуры.
точка принадлежит фигуре, если проведённая линия от этой точки (в любом направлении) пересекает границу фигуры нечётное число раз.
так что сначала находим такую (такие) точки, потом от них - заливка.

Автор: Sartorius 29.10.2010, 12:46
В Graph.tpu вроде ж FLoodFill был. Найдите внутренние точки сегментов аналитически. 

Автор: Sanaff 29.10.2010, 18:17
Аналитически искать может оказаться сложней для больших w. а для маленьких w фигура может быть незамкнута вообще. что тогда заливать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)