我正在研究一本解释 DDA 算法的书,但被卡在了一个点上。根据规则,这些点应该被四舍五入,所以在这种情况下,它应该是 (4,6),而不是 (4,5)它。检查下面的图片,我在书中圈出了我觉得不正确的点,所以是我看错了还是书错了?
问问题
2042 次
1 回答
1
为了在一个谨慎的计划 (x,y)、x,y 整数上绘制一条连续的线,该算法基于直线的斜率,使x或y成为“载体”(总是加一)并且其他坐标被插值。原因是:
- 绘图应尽可能接近直线方程
- 画线中不应有“洞”
- 不需要计算比必要更多的值(例如,有x “载体”
x+0.1
,x+0.2
等等......)
该文档似乎是此 PDF,您可以在其中看到实线并不总是在它穿过的像素的中心。多亏了该算法,一个点将有一个直接邻居,无论是在斜率x+1
还是y+1
取决于斜率(插值坐标可能是连续两次(或更多)相同的舍入值。例如,如果y被插值,你可以有(10 ,20), (11, 20), (12, 21) 有两次 y=20)。
仅考虑四分之一 [0, 90] 度,直线从坐标 (0,0) 开始。如果线斜率低于 45 度,最好将x作为“载体”(增加 1),并对y进行插值。例子
+++
+++
+++
这里x总是加一,但y有时与前一个x取相同的值(例如,对于 x=0, x=1, x=2 我们有相同的y)
返回四舍五入
在同一份文件中,据说第 47 页
为了在屏幕上绘制一个像素,我们需要将坐标四舍五入到最接近的整数
在进行插值时通常是这种情况。最好取最接近的整数。这意味着,通常,
>= .5
如果第一个小数是(例如4.71 => 5
),则取整数部分 + 1< .5
如果第一个小数是(例如5.42 => 5
),则只取整数部分
以便:
- 整数像素坐标更接近带小数的方程值
- 舍入值的总和(例如x)更可能接近方程计算值的总和。
在这种特殊情况下,~ (4, 38/7)
=被四舍五入到最接近的整数,即而不是。(4, 5.43)
5.43
5
6
于 2013-06-09T10:21:13.127 回答