Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {==============================================================================]
- Explanation: Returns the line of points fromPt => toPt.
- [==============================================================================}
- function GetTPALine(fromPt, toPt: TPoint): TPointArray;
- var
- i, h: Integer;
- begin
- if (fromPt <> toPt) then
- begin
- h := Max(Round(Abs(fromPt.X - toPt.X)), Round(Abs(fromPt.Y - toPt.Y)))
- SetLength(Result, (h + 1));
- for i := 0 to h do
- begin
- Result[i].X := (fromPt.X + Round((toPt.X - fromPt.X) * (i / h)));
- Result[i].Y := (fromPt.Y + Round((toPt.Y - fromPt.Y) * (i / h)));
- end;
- end else
- Result := [fromPt];
- end;
- procedure DebugLine(start, finish: TPoint; color: Integer);
- var
- t: Integer;
- bmp: TSCARBitmap;
- begin
- bmp := TSCARBitmap.Create('');
- bmp.SetSize(500, 500);
- t := GetSystemTime;
- bmp.SetPixels(GetTPALine(start, finish), color);
- Status(PointToStr(start) + ' => ' + PointToStr(finish) + ' [' + IntToStr(GetSystemTime - t) + ' ms.]');
- DebugBitmap(bmp);
- bmp.Free;
- end;
- var
- c: TIntArray;
- s, f: TPoint;
- l, i: Integer;
- begin
- c := [clRed, clYellow, clBlue, clGreen];
- s := Point(10, 10);
- f := Point(490, 490);
- repeat
- for l := 0 to 3 do
- for i := 10 to 489 do
- begin
- case l of
- 0:
- begin
- Inc(s.Y);
- Dec(f.Y);
- end;
- 1:
- begin
- Inc(s.X);
- Dec(f.X);
- end;
- 2:
- begin
- Dec(s.Y);
- Inc(f.Y);
- end;
- 3:
- begin
- Dec(s.X);
- Inc(f.X);
- end;
- end;
- DebugLine(s, f, c[l]);
- end;
- until False;
- end.
Advertisement
Add Comment
Please, Sign In to add comment