Windows GDI具有以下功能:
通过MoveTo();
的LineTo();
他们接受坐标从哪里开始绘图以及在哪里停止绘图。
但这些功能是如何实现的? (特别是LineTo)
他们是否需要计算A点和B点之间的所有点?
这条线是如何绘制的?
答案 0 :(得分:7)
是的,他们计算A和B之间的每个点。
有效执行此操作的最常用方法称为Bresenham's Line Algorithm。
请注意,Windows LineTo不会绘制最后一个点。当一个接一个地绘制线段时,这可以防止端点被双重绘制。
答案 1 :(得分:2)
Moveto“更容易”,因为它只是更新系统知道的当前坐标...
答案 2 :(得分:1)
它不需要计算A和B之间的所有点(无限),而只需要计算A和B之间的离散像素。这通常是标准线光栅化算法。有关Bresenham的线光栅化算法,请参阅Wikipedia,该算法是标准的教科书示例,通常是更灵活的光栅化算法的基础。
答案 3 :(得分:0)
我怀疑还有更多(只是)Bresenham的形式,因为还有(可选的)抗锯齿。请参阅this article了解可能实现的算法(Xiaolin Wu的行算法)