Janilabo

timing

Aug 2nd, 2013
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.57 KB | None | 0 0
  1. const
  2.   AREA_X1 = -250;
  3.   AREA_Y1 = -250;
  4.   AREA_X2 = 250;
  5.   AREA_Y2 = 250;
  6.   FILTER_X1 = -5;
  7.   FILTER_Y1 = -5;
  8.   FILTER_X2 = 5;
  9.   FILTER_Y2 = 5;
  10.  
  11. function simba_ClearTPAFromTPA(const arP, ClearPoints: TPointArray): TPointArray;
  12. var
  13.   i, j, l, l2: Integer;
  14.   Found: Boolean;
  15. begin
  16.   Setlength(result,0);
  17.   l := High(arP);
  18.   l2 := High(ClearPoints);
  19.   for i := 0 to l do
  20.   begin
  21.     Found := false;
  22.     for j := 0 to l2 do
  23.       if (arP[i].x = ClearPoints[j].x) and (arP[i].y = ClearPoints[j].y) then
  24.       begin
  25.         Found := True;
  26.         Break;
  27.       end;
  28.     if not found then
  29. // if (j = l2 + 1) then
  30.     begin
  31.       SetLength(Result, Length(Result) + 1);
  32.       Result[High(Result)] := arP[i];
  33.     end;
  34.   end;
  35. end;
  36.  
  37. function TPABounds(TPA: TPointArray): TBox;
  38.   var
  39.     h, i: Integer;
  40.   begin
  41.     h := High(TPA);
  42.     if (h > -1) then
  43.     begin
  44.       Result.X1 := TPA[0].X;
  45.       Result.Y1 := TPA[0].Y;
  46.       Result.X2 := TPA[0].X;
  47.       Result.Y2 := TPA[0].Y;
  48.       if (h > 0) then
  49.       for i := 1 to h do
  50.       begin
  51.         if (TPA[i].X < Result.X1) then
  52.           Result.X1 := TPA[i].X
  53.         else
  54.           if (TPA[i].X > Result.X2) then
  55.             Result.X2 := TPA[i].X;
  56.         if (TPA[i].Y < Result.Y1) then
  57.           Result.Y1 := TPA[i].Y
  58.         else
  59.           if (TPA[i].Y > Result.Y2) then
  60.             Result.Y2 := TPA[i].Y;
  61.       end;
  62.     end else
  63.     begin
  64.       Result.X1 := 0;
  65.       Result.Y1 := 0;
  66.       Result.X2 := 0;
  67.       Result.Y2 := 0;
  68.     end;
  69.   end;
  70.  
  71. function ClearTPAFromTPA2(arr, clear: TPointArray): TPointArray;
  72. var
  73.   v, h, r, l, x, y: Integer;
  74.   B: array of TBoolArray;
  75.   bx, tmp: TBox;
  76. begin;
  77.   r := 0;
  78.   l := Length(arr);
  79.   if (l > 0) then
  80.   begin
  81.     SetLength(Result, l);
  82.     bx := TPABounds(arr); // ..or TPABounds() if built-in to Simba!
  83.     h := High(clear);
  84.     if (h > -1) then
  85.     begin
  86.       tmp := TPABounds(clear); // ..or TPABounds() if built-in to Simba!
  87.       bx.X1 := Min(bx.X1, tmp.X1);
  88.       bx.Y1 := Min(bx.Y1, tmp.Y1);
  89.       bx.X2 := Max(bx.X2, tmp.X2);
  90.       bx.Y2 := Max(bx.Y2, tmp.Y2);
  91.     end;
  92.     SetLength(B, ((bx.X2 - bx.X1) + 1));
  93.     for v := 0 to (bx.X2 - bx.X1) do
  94.     begin
  95.       SetLength(B[v], ((bx.Y2 - bx.Y1) + 1));
  96.       y := High(B[v]);
  97.       for x := 0 to y do
  98.         B[v][x] := False;
  99.     end;
  100.     for x := 0 to h do
  101.       B[(clear[x].X - bx.X1)][(clear[x].Y - bx.Y1)] := True;
  102.     for v := 0 to (l - 1) do
  103.       if not B[(arr[v].X - bx.X1)][(arr[v].Y - bx.Y1)] then
  104.       begin
  105.         Result[r] := arr[v];
  106.         Inc(r);
  107.       end;
  108.     SetLength(B, 0);
  109.   end;
  110.   SetLength(Result, r);
  111. end;
  112.  
  113. procedure SetPixels(bmp: Integer; TPA: TPointArray; color: Integer);
  114. var
  115.   a, z, w, h: Integer;
  116. begin
  117.   z := High(TPA);
  118.   if (z > -1) then
  119.   begin
  120.     GetBitmapSize(bmp, w, h);
  121.     for a := 0 to z do
  122.       if ((TPA[a].X >= 0) and (TPA[a].Y >= 0) and (TPA[a].X < w) and (TPA[a].Y < h)) then
  123.         FastSetPixel(bmp, TPA[a].X, TPA[a].Y, color);
  124.   end;
  125. end;
  126.  
  127. var
  128.   t: Integer;
  129.   TPA, filter, output: TPointArray;
  130.  
  131. begin
  132.   TPA := TPAFromBox(IntToBox(AREA_X1, AREA_Y1, AREA_X2, AREA_Y2));
  133.   filter := TPAFromBox(IntToBox(FILTER_X1, FILTER_Y1, FILTER_X2, FILTER_Y2));
  134.   t := GetSystemTime;
  135.   output := simba_ClearTPAFromTPA(TPA, filter);
  136.   WriteLn('ClearTPAFromTPA (Simba): ' + IntToStr(GetSystemTime - t) + ' ms. [' + IntToStr(Length(output)) + ']');
  137.   SetLength(output, 0);
  138.   t := GetSystemTime;
  139.   output := ClearTPAFromTPA2(TPA, filter);
  140.   WriteLn('ClearTPAFromTPA2: ' + IntToStr(GetSystemTime - t) + ' ms. [' + IntToStr(Length(output)) + ']');
  141. end.
Advertisement
Add Comment
Please, Sign In to add comment