Bresenham在Delphi中绘制的线条 - Sign(x)函数的问题

时间:2010-10-15 12:08:08

标签: delphi delphi-7

我的任务是绘制八条线,形成类似普通八角星的东西,使用Bresenham的线绘制算法。它是用Delphi语言完成的。由于我不擅长画布绘图,我只需将维基百科中的算法复制粘贴到Object Pascal,只需进行最少的更改。
但是维基百科算法具有Sign(x)函数,Delphi标准库中没有这个函数,所以我必须自己编写:

 function Sign(x:integer):integer;
begin

if x=0 then  Result:=0;
if x>0 then Result:=1;
else Result:=-1;
end;

一切正常,但我只能在前两个象限中操作,其他坐标都是镜像的。 我更改了功能以显示错误:

function Sign(x:integer):integer;
begin

if x=0 then  Result:=0;
if x>0 then Result:=1;
if x<0 then Result:=-1 else begin
Form1.Label5.Caption:='Err!';
Result:=2;
end;

end;

我使用了以下功能:

 sx:=Sign(x1-x0);
 sy:=Sign(y1-y0); 

x0,x1,y0,y1是线的起点和终点的坐标。我很困惑,似乎有时x1-x0和y1-y0并非不小于,大于或等于零,但属于第4个'else'语句。你能解释一下这个不起眼的初学者,为什么会这样?

P.S。我通过将第4个'else'语句更改为Result in 1来使该程序正常工作,但仍然对这种情况感到困惑。

提前谢谢。

1 个答案:

答案 0 :(得分:4)

你在第二个之前错过了其他的if。所以0都落入= 0的情况和&lt; 0的其他情况。

function Sign(x:integer):integer;
begin    
    if x=0 then  Result:=0
    else if x>0 then Result:=1
    else Result:=-1;
end;

数学单元中有一个Sign功能。

你可以用参数-2,-1,0,+ 1,+ 2测试你的函数,看看会发生什么。