【发布时间】:2010-10-15 12:08:08
【问题描述】:
我的任务是使用 Bresenham 的线条绘制算法绘制 8 条线,形成类似于常规 8 点星形的东西。它是用德尔福语言完成的。由于我不太擅长画布绘图,因此我只是从 Wikipedia 中复制粘贴了 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”语句。请您解释一下卑微的初学者,为什么会发生这种情况?
附:通过将第 4 条“else”语句更改为 Result in 1,我让该程序正常工作,但仍然对这种情况感到困惑。
提前谢谢你。
【问题讨论】: