Janilabo

Janilabo | TPAInDistanceWithTPA((2)Ex(2))

Nov 4th, 2012
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.78 KB | None | 0 0
  1. function TPAInDistanceWithTPA(TPA1, TPA2: TPointArray; dist: Integer): Boolean;
  2. var
  3.   h1, i1, h2, i2: Integer;
  4. begin
  5.   h1 := High(TPA1);  
  6.   h2 := High(TPA2);
  7.   if ((h1 > -1) and (h2 > -1) and (dist >= 0)) then
  8.     for i1 := 0 to h1 do
  9.       for i2 := 0 to h2 do
  10.       begin      
  11.         Result := (dist >= Distance(TPA1[i1].X, TPA1[i1].Y, TPA2[i2].X, TPA2[i2].Y));
  12.         if Result then
  13.           Break;
  14.       end;
  15. end;
  16.  
  17. function TPAInDistanceWithTPAEx(TPA1, TPA2: TPointArray; dist: Integer; var m_pt1, m_pt2: TPoint): Boolean;
  18. var
  19.   h1, i1, h2, i2: Integer;
  20. begin
  21.   h1 := High(TPA1);  
  22.   h2 := High(TPA2);
  23.   if ((h1 > -1) and (h2 > -1) and (dist >= 0)) then
  24.     for i1 := 0 to h1 do
  25.       for i2 := 0 to h2 do
  26.       begin      
  27.         Result := (dist >= Distance(TPA1[i1].X, TPA1[i1].Y, TPA2[i2].X, TPA2[i2].Y));
  28.         if Result then
  29.         begin  
  30.           m_pt1 := TPA1[i1];
  31.           m_pt2 := TPA2[i2];
  32.           Break;
  33.         end;
  34.       end;
  35. end;
  36.  
  37. function TPAInDistanceWithTPAEx2(TPA1, TPA2: TPointArray; dist: Integer; var m_pts1, m_pts2: TPointArray): Boolean;
  38. var
  39.   m, h1, i1, h2, i2, r: Integer;
  40. begin
  41.   h1 := High(TPA1);  
  42.   h2 := High(TPA2);
  43.   if ((h1 > -1) and (h2 > -1) and (dist >= 0)) then
  44.   begin
  45.     m := Max(h1, h2);
  46.     SetLength(m_pts1, (m + 1));
  47.     SetLength(m_pts2, (m + 1));
  48.     for i1 := 0 to h1 do
  49.       for i2 := 0 to h2 do
  50.       begin      
  51.         if (dist >= Distance(TPA1[i1].X, TPA1[i1].Y, TPA2[i2].X, TPA2[i2].Y)) then
  52.         begin  
  53.           m_pts1[r] := TPA1[i1];
  54.           m_pts2[r] := TPA2[i2];
  55.           Inc(r);
  56.         end;
  57.       end;
  58.     Result := (r > 0);
  59.     SetLength(m_pts1, r);
  60.     SetLength(m_pts2, r);        
  61.   end;
  62. end;
  63.  
  64. function TPAInDistanceWithTPA2(TPA1, TPA2: TPointArray; minDist, maxDist: Integer): Boolean;
  65. var
  66.   d, h1, i1, h2, i2: Integer;
  67. begin
  68.   h1 := High(TPA1);  
  69.   h2 := High(TPA2);
  70.   if ((h1 > -1) and (h2 > -1) and (minDist >= 0) and (minDist <= maxDist)) then
  71.     for i1 := 0 to h1 do
  72.       for i2 := 0 to h2 do
  73.       begin    
  74.         d := Distance(TPA1[i1].X, TPA1[i1].Y, TPA2[i2].X, TPA2[i2].Y);  
  75.         Result := ((d >= minDist) and (d <= maxDist));
  76.         if Result then
  77.           Break;
  78.       end;
  79. end;
  80.  
  81. function TPAInDistanceWithTPA2Ex(TPA1, TPA2: TPointArray; minDist, maxDist: Integer; var m_pt1, m_pt2: TPoint): Boolean;
  82. var
  83.   d, h1, i1, h2, i2: Integer;
  84. begin
  85.   h1 := High(TPA1);  
  86.   h2 := High(TPA2);
  87.   if ((h1 > -1) and (h2 > -1) and (minDist >= 0) and (minDist <= maxDist)) then
  88.     for i1 := 0 to h1 do
  89.       for i2 := 0 to h2 do
  90.       begin
  91.         d := Distance(TPA1[i1].X, TPA1[i1].Y, TPA2[i2].X, TPA2[i2].Y);    
  92.         Result := ((d >= minDist) and (d <= maxDist));
  93.         if Result then
  94.         begin  
  95.           m_pt1 := TPA1[i1];
  96.           m_pt2 := TPA2[i2];
  97.           Break;
  98.         end;
  99.       end;
  100. end;
  101.  
  102. function TPAInDistanceWithTPA2Ex2(TPA1, TPA2: TPointArray; minDist, maxDist: Integer; var m_pts1, m_pts2: TPointArray): Boolean;
  103. var
  104.   d, m, h1, i1, h2, i2, r: Integer;
  105. begin
  106.   h1 := High(TPA1);  
  107.   h2 := High(TPA2);
  108.   if ((h1 > -1) and (h2 > -1) and (minDist >= 0) and (minDist <= maxDist)) then
  109.   begin
  110.     m := Max(h1, h2);
  111.     SetLength(m_pts1, (m + 1));
  112.     SetLength(m_pts2, (m + 1));
  113.     for i1 := 0 to h1 do
  114.       for i2 := 0 to h2 do
  115.       begin    
  116.         d := Distance(TPA1[i1].X, TPA1[i1].Y, TPA2[i2].X, TPA2[i2].Y);  
  117.         if ((d >= minDist) and (d <= maxDist)) then
  118.         begin  
  119.           m_pts1[r] := TPA1[i1];
  120.           m_pts2[r] := TPA2[i2];
  121.           Inc(r);
  122.         end;
  123.       end;
  124.     Result := (r > 0);
  125.     SetLength(m_pts1, r);
  126.     SetLength(m_pts2, r);        
  127.   end;
  128. end;
  129.  
  130. var
  131.   ds: TIntArray;
  132.   d, h, i, t: Integer;
  133.   TPA1, TPA2: TPointArray;
  134.  
  135. begin
  136.   ClearDebug;
  137.   TPA1 := TPAFromBox(Box(16, 151, 20, 153));
  138.   TPA2 := TPAFromBox(Box(0, 0, 15, 15));  
  139.   d := Distance(14, 14, 16, 152);                    
  140.   ds := [(d - 2), (d - 1), d, (d + 1), (d + 2)];
  141.   h := High(ds);      
  142.   WriteLn('TPAInDistanceWithTPA:');
  143.   for i := 0 to h do  
  144.   begin  
  145.     t := GetSystemTime;
  146.     if TPAInDistanceWithTPA(TPA1, TPA2, ds[i]) then
  147.       WriteLn('ds[' + IntToStr(i) + '] - YES! (' + IntToStr(GetSystemTime - t) + ' ms.)')
  148.     else
  149.       WriteLn('ds[' + IntToStr(i) + '] - NO. (' + IntToStr(GetSystemTime - t) + ' ms.)');  
  150.   end;  
  151.   WriteLn('TPAInDistanceWithTPA2:');
  152.   for i := 0 to h do  
  153.   begin  
  154.     t := GetSystemTime;
  155.     if TPAInDistanceWithTPA2(TPA1, TPA2, (ds[i] - 3), (ds[i] - 1)) then
  156.       WriteLn('ds[' + IntToStr(i) + '] - YES! (' + IntToStr(GetSystemTime - t) + ' ms.)')
  157.     else
  158.       WriteLn('ds[' + IntToStr(i) + '] - NO. (' + IntToStr(GetSystemTime - t) + ' ms.)');  
  159.   end;
  160.   SetLength(TPA1, 0);  
  161.   SetLength(TPA2, 0);
  162.   SetLength(ds, 0);
  163. end.
Advertisement
Add Comment
Please, Sign In to add comment