Рейтинг@Mail.ru
Rambler's Top100




Не нашли нужную работу? Закажи реферат, курсовую, диплом на заказ

реферат на тему: Сравнительный анализ алгоритмов построения выпуклой оболочки на плоскости

скачать реферат

begin sort(st,st^.prev); t:=st^.prev; st^.prev^.next:=s; st^.prev:=s^.prev; s^.prev^.next:=st; s^.prev:=t; st:=st^.prev; grah(s); end; t:=s; repeat writ(t^.x,t^.y); t:=t^.next; until t=s; while s<>nil do begin t:=s; cut(s,t); dispose(t); end; inc(kkk); until now-time>timew; str((now-time)/kkk*24*60*60:0:6,strr); TimeL.Caption:=strr+'s'; PaintBox1.Refresh; end; { end graham} procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var t:pr; begin new(t); t^.x:=(x-x0)/mx; t^.y:=(y-y0)/my; t^.n:=cn; cn:=t; Canvas.Pen.Color :=clBlue; Canvas.Ellipse(x-1,y-1,x+1,y+1); end; {-------------------------------------} procedure TForm1.QButtonClick(Sender: TObject); type prec=^rec; rec=record x,y:tp; p,n:prec; end; list=record b,e:prec; end; var t,bb,ee:prec; ll,gr,ls:list;

procedure cut(var l:list;t:prec); begin if t^.p<>nil then t^.p^.n:=t^.n else l.b:=t^.n; if t^.n<>nil then t^.n^.p:=t^.p else l.e:=t^.p; end; procedure clr(var l:list); begin l.b:=nil; l.e:=nil; end; procedure add(var l:list;var t:prec); begin t^.n:=nil; if l.e<>nil then l.e^.n:=t; t^.p:=l.e; l.e:=t; if l.b=nil then l.b:=t; end; procedure con(var l1,l2:list); begin if l2.b<>nil then l2.b^.p:=l1.e else exit; if l1.b<>nil then l1.e^.n:=l2.b else begin l1:=l2; exit; end; l1.e:=l2.e; end; procedure proc(var ls:list;b,e:prec); var l1,l2:list; r,t,m:prec; begin if ls.b=nil then exit; t:=ls.b; m:=t; while t<>nil do begin if (b^.x-m^.x)*(b^.y+m^.y)+(m^.x-e^.x)*(e^.y+m^.y)<(b^.x-t^.x)*(b^.y+t^.y)+(t^.x-e^.x)*(e^.y+t^.y) then m:=t; t:=t^.n; end; cut(ls,m); clr(l1); t:=ls.b; while t<>nil do begin r:=t^.n; if (t^.x-b^.x)*(m^.y-b^.y)>(m^.x-b^.x)*(t^.y-b^.y) then begin cut(ls,t); add(l1,t) end; t:=r; end; clr(l2); t:=ls.b; while t<>nil do begin r:=t^.n; if (t^.x-e^.x)*(m^.y-e^.y)<(m^.x-e^.x)*(t^.y-e^.y) then begin cut(ls,t); add(l2,t) end; t:=r; end; con(gr,ls); proc(l1,b,m); proc(l2,m,e); ls:=l1; add(ls,m); con(ls,l2); end; begin time:=now; kkk:=0; repeat

while sn<>nil do begin tt:=sn^.n; dispose(sn); sn:=tt; end; clr(ls); clr(gr); tt:=cn; if tt=nil then exit; while tt<>nil do begin new(t); t^.x:=tt^.x; t^.y:=tt^.y; tt:=tt^.n; add(ls,t); end;

bb:=ls.b; t:=ls.b; while t<>nil do begin if (t^.xnil) and ((t^.x=bb^.x)and(t^.y=bb^.y)) do t:=t^.n; ee:=t; while t<>nil do begin if ((t^.x<>bb^.x)or(t^.y<>bb^.y)) and (((t^.x-bb^.x)*(ee^.y-bb^.y)<(ee^.x-bb^.x)*(t^.y-bb^.y)) or (((t^.x-bb^.x)*(ee^.y-bb^.y)=(ee^.x-bb^.x)*(t^.y-bb^.y))and(abs(ee^.x-bb^.x)+abs(ee^.y-bb^.y)nil) and ((ee^.x<>bb^.x) or (ee^.y<>bb^.y)) then begin cut(ls,ee); proc(ls,bb,ee); clr(ll); add(ll,bb); con(ll,ls); add(ll,ee); ls:=ll; end else begin clr(ls); add(ls,bb); dispose(ee); end; t:=ls.b; while ls.b<>nil do begin if (t=ls.b)or(t=ls.e)or ((t^.x-t^.p^.x)*(t^.n^.y-t^.p^.y)<>(t^.n^.x-t^.p^.x)*(t^.y-t^.p^.y)) then writ(t^.x,t^.y); t:=t^.n; dispose(ls.b); ls.b:=t; end; t:=gr.b; while t<>gr.e do begin t:=t^.n; dispose(t^.p); end; if t<>nil then dispose(t); inc(kkk); until now-time>timew; str((now-time)/kkk*24*60*60:0:6,strr); TimeL.Caption:=strr+'s'; PaintBox1.Refresh; end; {------------------------------}
Не нашли нужную работу? Закажи реферат, курсовую, диплом на заказ




procedure TForm1.DiveRuleClick(Sender: TObject); type prec=^rec; rec=record a,x,y:tp; p,n:prec; end;

var r,t,ls,gs:prec; procedure add(var l:prec;t:prec); begin if l=nil then begin l:=t; t^.n:=l; t^.p:=l end else begin t^.n:=l; t^.p:=l^.p; l^.p^.n:=t; l^.p:=t; end; end; function arc(x,y:extended):extended; begin if abs(x)>abs(y) then begin if x>0 then arc:=1+y/x else arc:=5+y/x; end else begin if y>0 then arc:=3-x/y else begin if abs(y)=0 then arc:=0 else arc:=7-x/y; end; end; end; procedure con(var l1,l2:prec); var t:prec; begin if l2=nil then exit; if l1=nil then begin l1:=l2; exit; end; l1^.p^.n:=l2; l2^.p^.n:=l1; t:=l1^.p; l1^.p:=l2^.p; l2^.p:=t; end;

procedure cut(l1,l2:prec); var t:prec; begin l1^.p^.n:=l2; l2^.p^.n:=l1; t:=l1^.p; l1^.p:=l2^.p; l2^.p:=t; end;

procedure grah(var st:prec); var r,t,d:prec; f:integer; begin if st^.n=st^.p then exit; r:=st; t:=st; f:=0; while (f<=0) or (t<>r) do begin if t^.n=t^.p then break; if ((t^.n^.x-t^.p^.x)*(t^.y-t^.p^.y)>(t^.x-t^.p^.x)*(t^.n^.y-t^.p^.y)) or (((t^.n^.x-t^.p^.x)*(t^.y-t^.p^.y)=(t^.x-t^.p^.x)*(t^.n^.y-t^.p^.y)) and (abs(t^.y-t^.p^.y)+abs(t^.y-t^.n^.y)=abs(t^.p^.y-t^.n^.y)) and(abs(t^.x-t^.p^.x)+abs(t^.x-t^.n^.x)=abs(t^.p^.x-t^.n^.x))) then begin if t=r then begin dec(f); r:=t^.n; end; d:=t; t:=t^.n; cut(t,d); t:=t^.p; con(gs,d); end else begin t:=t^.n; if t=r then inc(f); end; end; st:=t; end; procedure proc(var ls:prec); var t,l1,l2,r,l:prec; x,y:tp; f:boolean; begin if ls^.n=ls then exit;

l1:=ls; l2:=ls; repeat l1:=l1^.n; l2:=l2^.p; until (l1=l2) or (l1^.p=l2); l1:=ls; cut(l1,l2); proc(l1); proc(l2); if l1^.n=l1 then if l2^.n<>l2 then begin t:=l1; l1:=l2; l2:=t; end else begin l1^.n:=l2; l1^.p:=l2; l2^.n:=l1; l2^.p:=l1; ls:=l1; exit; end;

x:=(l1^.x+l1^.n^.x+l1^.n^.n^.x)/3; y:=(l1^.y+l1^.n^.y+l1^.n^.n^.y)/3;

r:=l1; r^.a:=arc((r^.x-x),(r^.y-y)); t:=l1; repeat t^.a:=arc((t^.x-x),(t^.y-y)); if (r^.a>t^.a) or ((r^.a=t^.a) and (abs(r^.x-x)+abs(r^.y-y)>abs(t^.x-x)+abs(t^.y-y))) then r:=t; t:=t^.n; until t=l1; l1:=r; l:=l2; r:=l; t:=r; f:=false; repeat if (t.x-x)*(r^.y-y)>(r^.x-x)*(t.y-y) then r:=t; if (t.x-x)*(l^.y-y)<(l^.x-x)*(t.y-y) then l:=t; f:=f or((x-t^.p^.x)*(t^.y-t^.p^.y)>(t^.x-t^.p^.x)*(y-t^.p^.y)); t:=t^.n; until (t=l2);

if (l^.x=x) and (l^.y=y) then r:=r^.n else l:=l^.n; if f then begin cut(l,r); if l<>r then con(gs,l); end; l2:=r;

r:=l2; r^.a:=arc((r^.x-x),(r^.y-y)); t:=l2; repeat t^.a:=arc((t^.x-x),(t^.y-y)); if (r^.a>t^.a) or ((r^.a=t^.a) and (abs(r^.x-x)+abs(r^.y-y)>abs(t^.x-x)+abs(t^.y-y))) then r:=t; t:=t^.n; until t=l2; l2:=r; l1^.p^.n:=nil; l2^.p^.n:=nil; r:=l1; l:=l2; ls:=nil; while (r<>nil) and (l<>nil) do begin if (r^.anil then r^.p:=t^.p; add(ls,t); end else begin t:=l; l:=l^.n; if l<>nil then l^.p:=t^.p; add(ls,t); end; end; if r<>nil then begin r^.p^.n:=r; con(ls,r); end; if l<>nil then begin l^.p^.n:=l; con(ls,l); end; grah(ls); end; begin time:=now; kkk:=0; repeat

while sn<>nil do begin tt:=sn^.n; dispose(sn); sn:=tt; end; ls:=nil; gs:=nil; tt:=cn; if tt=nil then exit; while tt<>nil do begin new(t); t^.x:=tt^.x; t^.y:=tt^.y; tt:=tt^.n; add(ls,t); end; proc(ls);

скачать реферат
первая   ... 2 3 4 5 6 7

Не нашли нужную работу? Закажи реферат, курсовую, диплом на заказ

Внимание! Студенческий отдых и мегатусовка после сессии!


Обратная связь.

IsraLux отзывы Израиль отзывы