1

我正在研究一本解释 DDA 算法的书,但被卡在了一个点上。根据规则,这些点应该被四舍五入,所以在这种情况下,它应该是 (4,6),而不是 (4,5)它。检查下面的图片,我在书中圈出了我觉得不正确的点,所以是我看错了还是书错了? 在此处输入图像描述

4

1 回答 1

1

为了在一个谨慎的计划 (x,y)、x,y 整数上绘制一条连续的线,该算法基于直线的斜率,使xy成为“载体”(总是加一)并且其他坐标被插值。原因是:

  • 绘图应尽可能接近直线方程
  • 画线中不应有“洞”
  • 不需要计算比必要更多的值(例如,有x “载体” x+0.1x+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.4356

于 2013-06-09T10:21:13.127 回答