Advertisement
Janilabo

Untitled

Nov 4th, 2013
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.36 KB | None | 0 0
  1. {$loadlib pumbaa.dll}
  2.  
  3.  
  4.  
  5. var
  6.   TPA: TPointArray;
  7.   i: Integer;
  8.  
  9. procedure TPADilation(var TPA: TPointArray; iterations: Integer);
  10. var
  11.   w, h, l, i, j, c, s, g, n, t: Integer;
  12.   m: T2DIntegerArray;
  13.   o, d: TIntegerArray;
  14.   se: TStructuringElement;
  15.   e: Boolean;
  16.   p: TPoint;
  17.   b: TBox;
  18. begin
  19.   if (iterations > 0) then
  20.   begin
  21.     l := Length(TPA);
  22.     if (l > 0) then
  23.     begin
  24.       b := pp_TPABounds(TPA);
  25.       pp_BoxResize(b, (iterations + 1));
  26.       pp_BoxDimensions(b, w, h);
  27.       m := pp_Create(0, w, h);
  28.       se := pp_SE_Cross(1, 1, -1, 1, 1);
  29.       g := 3;
  30.       c := 0;
  31.       for i := 0 to (l - 1) do
  32.         if not (m[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] = 1) then
  33.         begin
  34.           m[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] := 1;
  35.           TPA[c] := TPA[i];
  36.           c := (c + 1);
  37.         end;
  38.       l := (l - (c - 1));
  39.       s := (l - 1);
  40.       if (c > 0) then
  41.         SetLength(TPA, l);
  42.       d := pp_TIAByRange(0, (w * h));
  43.       o := pp_Clone(d);
  44.       t := 0;
  45.       repeat
  46.         e := ((t and 1) = 0);
  47.         n := 0;
  48.         case e of
  49.           True:
  50.           for i := 0 to s do
  51.             for j := 0 to g do
  52.             begin
  53.               p.X := (TPA[o[i]].X + se[j].pixel.X);
  54.               p.Y := (TPA[o[i]].Y + se[j].pixel.Y);
  55.               if (m[(p.X - b.X1)][(p.Y - b.Y1)] = 0) then
  56.               begin
  57.                 SetLength(TPA, (l + 1));
  58.                 TPA[l] := p;
  59.                 m[(p.X - b.X1)][(p.Y - b.Y1)] := 1;
  60.                 d[n] := (l + i);
  61.                 n := (n + 1);
  62.                 l := (l + 1);
  63.               end;
  64.             end;
  65.           False:
  66.           for i := 0 to s do
  67.             for j := 0 to g do
  68.             begin
  69.               p.X := (TPA[d[i]].X + se[j].pixel.X);
  70.               p.Y := (TPA[d[i]].Y + se[j].pixel.Y);
  71.               if (m[(p.X - b.X1)][(p.Y - b.Y1)] = 0) then
  72.               begin
  73.                 SetLength(TPA, (l + 1));
  74.                 TPA[l] := p;
  75.                 m[(p.X - b.X1)][(p.Y - b.Y1)] := 1;
  76.                 o[n] := (l + i);
  77.                 n := (n + 1);
  78.                 l := (l + 1);
  79.               end;
  80.             end;
  81.         end;
  82.         s := (n - 1);
  83.         t := (t + 1);
  84.       until (t >= iterations);
  85.     end;
  86.   end;
  87. end;
  88.  
  89. begin
  90.   ClearDebug;
  91.   TPA := [Point(10, 10)];
  92.   TPADilation(TPA, 5);
  93.   WriteLn(ToStr(TPA));
  94. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement