【问题标题】:Algorithm for drawing lines on the plane在平面上画线的算法
【发布时间】:2011-08-25 10:35:49
【问题描述】:

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

【问题讨论】:

    标签: .net algorithm graphics image-processing


    【解决方案1】:

    【讨论】:

    • 在现实中,当然,这些天你很少使用它——你把它留给你的图形 API。但是,对于其他等效的问题,有时仍然值得了解。例如,您需要在每个滴答事件上更新您的整数时间变量 - 但滴答事件以某个非整数间隔出现。只要该间隔是合理的,基于 Bresenhams 的方法就可以保持该时间而不会产生累积误差。
    • @Steve:即使在今天也有很多用途......例如在 2d 网格上移动玩家,通过 3d 网格追踪光线(需要修改)等等......
    【解决方案2】:

    没有“逐点”算法 - 点非常小,因此任何基于点的算法都需要无限时间才能完成。

    相反,线条是根据名义上的笔宽绘制的,并计算用笔在线条上划过的像素的数量和强度。

    如果您只想像 1970 年代那样打开和关闭像素,请使用 Brensenham 的算法系列之一。

    大多数现代计算机图形使用抗锯齿算法 - 描边、二次采样或精确像素覆盖 - 有时在 GPU 中使用并行算法(例如,通过将细矩形投影到平面上来绘制一条线,或执行覆盖计算每个像素并行)。

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

    【讨论】:

    • +1 - 但我看到很多关于使用术语“点”代替“像素”的图形的文章。我同意“像素”更好,但数学家没有任何特殊的权力来定义英语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多