Q&A

  • *표로 선을 그리려고 합니다. 도와주세요
procedure TForm1.Button1Click(Sender: TObject);
var
   x1, x2, y1, y2 : integer;
   dx, dy, steps, k : integer;
   xi, yi, x, y : real;
   buf : char;
begin
   x1 := 20;
   x2 := 80;
   y1 := 20;
   y2 := 80;
   buf := '*';
   dx := x2 - x1;
   dy := y2 - y1;
   if abs(dx) > abs(dy) then steps := abs(dx)
     else steps := abs(dy);
   xi := dx / steps;
   yi := dy / steps;
   x := x1;
   y := y1;
   image1.Canvas.TextOut(round(x), round(y), '*');

   for k:=1 to steps do
   begin
     x := x + xi;
     y := y + yi;
     image1.Canvas.TextOut(round(x), round(y), '*');
   end;
end;

end.

---- 소스는 위와같구요... *이 한개만 출력돼네요... DDA알고리즘으로 *을 출력한것인데 그전에 찍었던 별은 없어지는거 같아요...

1  COMMENTS
  • Profile
    손희석 2003.10.28 18:49
    이유는 간단합니다. *표만큼의 X좌표와 Y좌표를 벌려주는 연산이 필요합니다.
    TextOut함수의 파라메터 X,Y는 어느 한 지점의 점을 기준으로 출력하기 때문이죠.
    그러니
    아래의 예제를 고치면 이렇습니다.
    이상하게 찍힐수도 있으니 이해하시고.. 조금더 수정하시면 될거에요 ^^

    항상 즐코하세요..

    procedure TForm1.Button1Click(Sender: TObject);
    var
       x1, x2, y1, y2 : integer;
       dx, dy, steps, k : integer;
       xi, yi, x, y : real;
       buf : char;
    begin
       x1 := 20;
       x2 := 80;
       y1 := 20;
       y2 := 80;
       buf := '*';
       dx := x2 - x1;
       dy := y2 - y1;
       if abs(dx) > abs(dy) then steps := abs(dx)
         else steps := abs(dy);
       xi := dx / steps;
       yi := dy / steps;
       x := x1;
       y := y1;
       image1.Canvas.TextOut(round(x), round(y), '*');

       for k:=1 to steps do
       begin
         x := x + xi+ image1.Canvas.TextHeight('*');  <--- 수정부분
         y := y + yi+ image1.Canvas.TextWidth('*');  <--- 수정부분
         image1.Canvas.TextOut(round(x), round(y), '*');
       end;
    end;