Wu的抗锯齿算法,垂直线

问题描述 投票:0回答:1

我主要按照Xiaoolin Wu 的算法 来实现 Wu 的算法,但遇到了一些障碍。具体来说,这部分算法包含在 wiki 条目底部的注释中:

If at the beginning of the routine abs(dx) < abs(dy) is true, 
then all plotting should be done with x and y reversed.

我认为这意味着只需用plot(y, x)反转对plot(x, y)的所有调用,但这样做会导致一些非常特殊的线条(我似乎无法获得屏幕截图,因为每次我尝试一下,我的 OpenGL 窗口将空白粘贴到 Paint 中)。

之前实施过此操作的人可以给我一些指导吗?我的线条现在看起来有点傻,每个象限只填充了一半。

algorithm antialiasing line-drawing
1个回答
2
投票

您不仅应该将

plot(x,y)
plot(y,x)
交换,还应该交换输入参数
x1<->y1
x2<->y2
。如果您同时执行这两项操作,它将正常工作。后一部分是在文章的代码中完成的,但不是绘图坐标的切换。

背后的原因是您在

x
范围内逐像素步进。如果您的水平范围小于垂直范围,则可能会产生间隙(例如,一条完全垂直的线将导致它仅具有单个 x 值)。

因此,您可以切换输入参数

x
y
,但同时切换输出坐标系(通过在绘图函数中交换
x
y
)。

© www.soinside.com 2019 - 2024. All rights reserved.