فاطمه_14
دوشنبه 05 اردیبهشت 1390, 15:59 عصر
procedure tform1.line_(x0,y0,x1,y1:integer);
var
e2,y,err,dx,dy,sx,sy:integer;
begin
dx := abs(x1-x0);
dy := abs(y1-y0) ;
form1.Canvas.Pen.Width:=2;
if x0 < x1 then sx := 1 else sx := -1;
if y0 < y1 then sy := 1 else sy := -1;
err := dx-dy;
y:=1;
while (y=1) do begin
form1.Canvas.MoveTo(x0,y0);
form1.Canvas.LineTo(x0,y0);
if (x0 = x1) and (y0 = y1) then exit;
e2 := 2*err;
if e2 > dy then begin
err := err - dy;
x0 := x0 + sx;
end;
if e2 < dx then begin
err := err + dx;
y0 := y0 + sy ;
end;
end;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
line_(400,200,1,1);
end;
end.
سلام
به نظر من
در این برنامه شیب خط را نسبت به y بااستفاده از عملیات تفریق و جمع بدست می آوریم اگه dx بزرگتر از dy باشه یعنی به خط افقی نزدیکتره (خط در این حالت خوابیده تره) اگه dy بزرگتر از dx باشه پس خط ایستاده تره (به خط عمودی نزدیکتره)
وقتی که به خط افقی نزدیکه در این حالت پیکسل های x پشت سر هم و وقتی که به خط عمودی نزدیکه در این حالت پیکسل های y پشت سر هم روشن می شند.
نظر شما چیه؟
خواهش می کنم کمکم کنید
var
e2,y,err,dx,dy,sx,sy:integer;
begin
dx := abs(x1-x0);
dy := abs(y1-y0) ;
form1.Canvas.Pen.Width:=2;
if x0 < x1 then sx := 1 else sx := -1;
if y0 < y1 then sy := 1 else sy := -1;
err := dx-dy;
y:=1;
while (y=1) do begin
form1.Canvas.MoveTo(x0,y0);
form1.Canvas.LineTo(x0,y0);
if (x0 = x1) and (y0 = y1) then exit;
e2 := 2*err;
if e2 > dy then begin
err := err - dy;
x0 := x0 + sx;
end;
if e2 < dx then begin
err := err + dx;
y0 := y0 + sy ;
end;
end;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
line_(400,200,1,1);
end;
end.
سلام
به نظر من
در این برنامه شیب خط را نسبت به y بااستفاده از عملیات تفریق و جمع بدست می آوریم اگه dx بزرگتر از dy باشه یعنی به خط افقی نزدیکتره (خط در این حالت خوابیده تره) اگه dy بزرگتر از dx باشه پس خط ایستاده تره (به خط عمودی نزدیکتره)
وقتی که به خط افقی نزدیکه در این حالت پیکسل های x پشت سر هم و وقتی که به خط عمودی نزدیکه در این حالت پیکسل های y پشت سر هم روشن می شند.
نظر شما چیه؟
خواهش می کنم کمکم کنید