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알고리즘으로 *을 출력한것인데 그전에 찍었던 별은 없어지는거 같아요...
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;