在平面上画直线的算法

5

如果一条线不是水平或垂直的,绘制它在平面上(逐点)的算法是什么?

2个回答

10

3
现实情况下,你很少会使用它(指文中提到的算法),现在更多地依赖于图形 API。但是,有时候了解这个算法仍然有其价值,因为其他问题可能等同于它。例如,你需要在每个tick事件中更新整数时间变量,但是这些tick事件以某种非整数间隔发生。只要该间隔是有理数,基于Bresenham算法的方法就可以在没有累积误差的情况下维护时间。 - user180247
1
@Steve:即使在今天,也有很多用途...例如,在2D网格上移动玩家,在3D网格中跟踪光线(需要修改),等等... - Yakov Galka

4

没有“逐点”算法——因为点是无限小的,所以任何基于点的算法都需要无限长的时间才能完成。

相反,根据虚拟笔宽度绘制线条,并计算绘制该线条时笔触覆盖的像素数量和强度。

如果您只想像上世纪70年代那样打开或关闭像素,则使用Brensenham算法家族之一。

大多数现代计算机图形使用反锯齿算法——要么是笔划、子采样或精确像素覆盖——有时在GPU中使用并行算法(例如通过将一个薄矩形投影到平面上来绘制线条,或者对每个像素进行覆盖计算)。

许多图形算法都是基于贝塞尔曲线的;直线只是控制点在一条直线上的曲线,因此绘制它们的算法是相同的,尽管可能会做一些优化。


1
+1 - 但我看过很多关于图形的文章都使用“点”代替“像素”的术语。我同意“像素”更好,但数学家没有任何特殊权力来定义英语语言。 - user180247

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接