电脑怎么划线?

时间:2011-07-29 19:02:27

标签: graphics gdi

Windows GDI具有以下功能:

通过MoveTo();

的LineTo();

他们接受坐标从哪里开始绘图以及在哪里停止绘图。

但这些功能是如何实现的? (特别是LineTo)

他们是否需要计算A点和B点之间的所有点?

这条线是如何绘制的?

4 个答案:

答案 0 :(得分:7)

是的,他们计算A和B之间的每个点。

有效执行此操作的最常用方法称为Bresenham's Line Algorithm

请注意,Windows LineTo不会绘制最后一个点。当一个接一个地绘制线段时,这可以防止端点被双重绘制。

答案 1 :(得分:2)

从未见过Windows源代码的人都可以深入回答这个问题...... 但Windows和任何其他软件一样:它需要一些算法来绘制一条线......你可以在这里找到一个这样的算法http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

Moveto“更容易”,因为它只是更新系统知道的当前坐标...

答案 2 :(得分:1)

它不需要计算A和B之间的所有点(无限),而只需要计算A和B之间的离散像素。这通常是标准线光栅化算法。有关Bresenham的线光栅化算法,请参阅Wikipedia,该算法是标准的教科书示例,通常是更灵活的光栅化算法的基础。

答案 3 :(得分:0)

我怀疑还有更多(只是)Bresenham的形式,因为还有(可选的)抗锯齿。请参阅this article了解可能实现的算法(Xiaolin Wu的行算法)