{****************************************}
{逐点比较法生成直线,计算机图形学实验。 }
{Disigned by whbo ,第一象限,逆时针。 }
{CopyRight (c) 2003-2004 Reserved. }
{With any question,Tel:07146526270 }
{Email:wanghongbottt123@163.com }
{****************************************}
unit unitcircle;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
Tcirclefrm = class(TForm)
input1: TEdit;
input2: TEdit;
input3: TEdit;
input4: TEdit;
Button1: TButton;
StaticText1: TStaticText;
StaticText2: TStaticText;
GroupBox1: TGroupBox;
Image1: TImage;
StaticText3: TStaticText;
input5: TEdit;
input6: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
circlefrm: Tcirclefrm;
implementation
{$R *.dfm}
procedure Tcirclefrm.Button1Click(Sender: TObject);
var
x0,y0,r0,R1,x,y,xe,ye,i,n1,n2,n,k:integer;
//起点(x0,y0),终点(xe,ye),圆心(r0,r1)
//n:记打点数
f:array[1..1024] of integer;
begin
//以下三行代码由于form显示效果不佳,我作出的设定
statictext3.Visible:=false;
input5.Visible:=false;
input6.Visible:=false;
groupbox1.Visible:=true;
groupbox1.Align:=alclient;
image1.Align:=alclient;
x0:=strtoint(trim(input1.Text));
y0:=strtoint(trim(input2.Text));
xe:=strtoint(trim(input3.Text));
ye:=strtoint(trim(input4.Text));
r0:=strtoint(trim(input5.Text));
r1:=strtoint(trim(input6.Text));
x:=x0;
y:=y0;
//求出n的数值
n1:=abs(xe-x0);
n2:=abs(ye-y0);
n:=n1+n2;
//以下开始循环打点
f[1]:=1-2*(x0-r0); //pascal的数组从1开始
//结果由课本P64(第一步移动X)得来
try
for i:=1 to n do
begin
if f[i]>=0 then
begin
f[i+1]:=f[i]-2*abs(r0-x);
x:=x-1;
end
else
begin
f[i+1]:=f[i]+2*abs(r1-y);
y:=y+1;
end;
circlefrm.Image1.Canvas.Pixels[x,y]:=clred;
//showmessage(inttostr(x)+' '+inttostr(y));
end;
except
application.MessageBox('你的输入有错误!','警告',mb_ok);
end;
end;
procedure Tcirclefrm.FormCreate(Sender: TObject);
begin
circlefrm.Height:=450;
circlefrm.Width:=600;
end;
end.