【问题标题】:How does computer draw a line??电脑是怎么画线的??
【发布时间】:2011-10-16 04:57:15
【问题描述】:

Windows GDI 具有以下功能:

MoveTo();

LineTo();

它们接受开始绘制和停止绘制的坐标。

但是这些功能是如何实现的呢? (尤其是 LineTo)

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

这条线到底是怎么画的??

【问题讨论】:

    标签: graphics gdi


    【解决方案1】:

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

    最常见的有效方式是Bresenham's Line Algorithm

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

    【讨论】:

      【解决方案2】:

      没有看过 Windows 源代码的人可以深入回答这个问题... 但是 Windows 就像任何其他软件一样:它需要一些算法来画一条线......你可以在这里看到一个这样的算法http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

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

      【讨论】:

      • 说不定,看过Windows源代码的人也是StackOverflow用户.. :)
      • 可能...但即使那样我也很确定会有保密协议禁止分享他在源代码中看到的任何内容:-)
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我怀疑除了(一种)Bresenham 之外还有更多事情要做,因为还有(可选的)抗锯齿功能。请参阅this article 了解可能实现的算法(吴小林的线算法)

        【讨论】:

          猜你喜欢
          • 2012-11-29
          • 2023-03-20
          • 2021-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-16
          • 1970-01-01
          相关资源
          最近更新 更多