【问题标题】:connecting multiple anti-aliased lines together将多条抗锯齿线连接在一起
【发布时间】:2011-08-09 05:32:47
【问题描述】:

我从维基百科和其他地方的伪代码中实现/复制了 wu 线算法。

绘制正弦波时,它会在直线从 y 显性变为 x 显性(反之亦然)的点处分解。 (我没有复制端点代码,因为它看起来很糟糕,而且我不需要它们。)

有人知道这个问题的解决方案吗?如果不是,我将自己修改算法以使其正常工作。我只是好奇是否有人遇到过这个问题并且确切地知道如何解决它。是否可以在没有全局相互了解的线路的情况下实施?或者这就是为什么绘图API要实现moveto和lineto函数?

The pseudo code

【问题讨论】:

  • 这是吴算法的产物。它或者别名水平像素或垂直像素。因此,当线条从 x 显性变为 y 显性或 vv 时,您会看到效果。由于算法的性质,无法在 wu 框架内解决此问题。
  • 我要做的就是画一些行得通的线条,看起来不像****。有人推荐另一种算法或方法吗?
  • 我想我必须跟踪斜率并相应地调整算法。
  • 如果您要自己修复它,为什么需要我的意见? :)

标签: c algorithm graphics drawing antialiasing


【解决方案1】:

如果性能不是一个大问题,您可以采取更简单的方法来绘制抗锯齿线,例如:

  • 在更高分辨率的网格中绘制线条(例如目标分辨率的整数倍) - 您需要调整它们的粗细。
  • 通过将每个 n x m 像素块转换为单个像素(例如通过平均 RGB 值。

根据您正在开发的语言或操作系统,可能会内置功能来简化这一点。

或者,您可以计算每个像素的哪个部分被线覆盖(通过将像素正方形与线相交)来计算像素值,使像素强度相对于线覆盖的像素区域的部分。

【讨论】:

  • 吴线算法已经做到了。问题在于用小数点画线。有一个四舍五入的问题。我正在努力。
【解决方案2】:

我只是想跟进并关闭它。我以为我已经从网站上发布的算法中删除了端点代码。但是,我犯了一个错误,并没有将其全部删除,所以这就是线路中断的原因。这是最终结果:

如果您仔细观察,您会发现当线条从 y 主导变为 x 主导时,强度会略微跳跃,反之亦然。这也是因为这条线不到一个像素长。我想以更高分辨率画一条线,然后向下采样会产生更高质量的结果,就像 Guy Sirton 建议的那样。但这对我的目的来说已经足够了。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2016-06-28
    • 2011-07-05
    • 2014-03-19
    相关资源
    最近更新 更多