求助用delphi实现三种直线生成方法的代码?(100分)

  • 主题发起人 主题发起人 文帆
  • 开始时间 开始时间

文帆

Unregistered / Unconfirmed
GUEST, unregistred user!
就是用 bresenham 法 和 逐点比较法 和 数值微分法 实现直线生成
我初学 delphi 还不会 所以求教
 
下面这个例子是bresenham 法,中点画线法、数值微分法划直线:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
DDA: TButton;
Midpoint: TButton;
Bresenham: TButton;
procedure DDAClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure MidpointClick(Sender: TObject);
procedure BresenhamClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
const x1 = 450;
const y1 = 50;
const x0 = 50;
const y0 = 250;

implementation

{$R *.DFM}

procedure TForm1.DDAClick(Sender: TObject);
var
x, y: integer;
dx, dy, yy, k: real;
color1: integer;
begin
{ image1.canvas.brush.style:=bssolid;
image1.canvas.brush.color:=clwhite;
image1.canvas.FillRect(rect(0,0,image1.width,image1.height));
}
dx := x1 - x0;
dy := y1 - y0;
k := dy / dx;
yy := y0;
color1 := clred;
for x := x0 - 25 to x1 - 25 do
begin
y := round(yy + 0.5);
image1.canvas.pixels[x, y] := color1;
yy := yy + k;
end;



end;

procedure TForm1.FormCreate(Sender: TObject);
begin
image1.canvas.brush.style := bssolid;
image1.canvas.brush.color := clwhite;
image1.canvas.FillRect(rect(0, 0, image1.width, image1.height));
self.DoubleBuffered := true;
end;

procedure TForm1.MidpointClick(Sender: TObject);
var
a, b, x, y: integer;
d1, d2, d: integer;
color1: integer;
begin
a := y1 - y0;
b := x1 - x0;
d := 2 * a + b;
d1 := 2 * a;
d2 := 2 * (a + b);
x := x0;
y := y0;
color1 := clgreen;
image1.canvas.pixels[x, y] := color1;
while x < x1 do
begin
if (d < 0) then
begin
inc(x);
dec(y);
d := d + d2;
end
else
begin
inc(x);
d := d + d1;
end;
image1.canvas.pixels[x, y] := color1;
end;
end;

procedure TForm1.BresenhamClick(Sender: TObject);
var
x, y, dx, dy: integer;
k, e: real;
i, color1: integer;
begin
dx := x1 - x0;
dy := y0 - y1;
k := dy / dx;
e := -0.5;
x := x0;
y := y0;
color1 := clblack;
for i := 0 to dx do
begin
image1.canvas.pixels[x + 25, y] := color1;
x := x + 1;
e := e + k;
if e >= 0 then
begin
dec(y);
e := e - 1;
end;
end;
end;

end.
 
接受答案了.
 
后退
顶部