我尝试使用Bresenham's Line Drawing Algorithm在20x20网格上绘制一条线。
基本上,当变量deltaerror(来自wiki)大于1时(当y的变化大于x的变化时),y值几乎变为应该的两倍。希望我能在代码的评论中更好地解释它。我也认为我找到了错误的来源,我也会在评论中解释。
这是我制作的代码,主要是从wiki中的伪代码复制而来。
query.gsub!(' ', '+')
感谢您的帮助!
编辑:当d_error大于1时,切换x和y值。当斜率高于1且低于-1时,该行消失。
答案 0 :(得分:1)
引用快速谷歌结果:
http://www.math.ubc.ca/~cass/courses/m308-02b/projects/puhalovic/#alldirections
"当斜率大于1或小于-1时,我们必须采用先前的实现并将所有x和y值交换为"移动"计算回到" First Octant"。"
IOW:bresenham的教科书实施仅适用于(用你的术语)d_error<=1
的行。您必须实施上述链接中提到的交换。