Janilabo

GetTPALine()

Mar 31st, 2013
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.80 KB | None | 0 0
  1. {==============================================================================]  
  2.   Explanation: Returns the line of points fromPt => toPt.                  
  3. [==============================================================================}
  4. function GetTPALine(fromPt, toPt: TPoint): TPointArray;
  5. var
  6.   i, h: Integer;
  7. begin
  8.   if (fromPt <> toPt) then
  9.   begin
  10.     h := Max(Round(Abs(fromPt.X - toPt.X)), Round(Abs(fromPt.Y - toPt.Y)))
  11.     SetLength(Result, (h + 1));
  12.     for i := 0 to h do
  13.     begin
  14.       Result[i].X := (fromPt.X + Round((toPt.X - fromPt.X) * (i / h)));
  15.       Result[i].Y := (fromPt.Y + Round((toPt.Y - fromPt.Y) * (i / h)));
  16.     end;
  17.   end else
  18.     Result := [fromPt];
  19. end;
  20.  
  21. procedure DebugLine(start, finish: TPoint; color: Integer);
  22. var
  23.   t: Integer;
  24.   bmp: TSCARBitmap;
  25. begin
  26.   bmp := TSCARBitmap.Create('');
  27.   bmp.SetSize(500, 500);  
  28.   t := GetSystemTime;
  29.   bmp.SetPixels(GetTPALine(start, finish), color);
  30.   Status(PointToStr(start) + ' => ' + PointToStr(finish) + ' [' + IntToStr(GetSystemTime - t) + ' ms.]');
  31.   DebugBitmap(bmp);
  32.   bmp.Free;    
  33. end;
  34.  
  35. var
  36.   c: TIntArray;
  37.   s, f: TPoint;
  38.   l, i: Integer;
  39.  
  40. begin
  41.   c := [clRed, clYellow, clBlue, clGreen];
  42.   s := Point(10, 10);
  43.   f := Point(490, 490);
  44.   repeat      
  45.     for l := 0 to 3 do  
  46.       for i := 10 to 489 do
  47.       begin    
  48.         case l of  
  49.           0:
  50.           begin
  51.             Inc(s.Y);
  52.             Dec(f.Y);
  53.           end;
  54.           1:
  55.           begin
  56.             Inc(s.X);
  57.             Dec(f.X);
  58.           end;
  59.           2:
  60.           begin
  61.             Dec(s.Y);
  62.             Inc(f.Y);
  63.           end;
  64.           3:
  65.           begin
  66.             Dec(s.X);
  67.             Inc(f.X);
  68.           end;
  69.         end;
  70.         DebugLine(s, f, c[l]);
  71.       end;  
  72.   until False;
  73. end.
Advertisement
Add Comment
Please, Sign In to add comment