📜  Line 和 Line Drawing 算法的扫描转换

📅  最后修改于: 2022-05-13 01:57:14.481000             🧑  作者: Mango

Line 和 Line Drawing 算法的扫描转换

线的扫描转换:

  • 一条线连接两个点。
  • 它是图形中的基本元素。
  • 您需要在两个点之间画一条线来画一条线。

根据几何形状,一条线或线段可以由两个点唯一地描述。我们还从代数中知道,一条直线可以由斜率定义,通常用字母 m 表示,以及一个 y 轴截距,用字母 b 表示。计算机图形中的一条线通常由两个端点定义。然而,大多数画线算法将斜率和 y 截距计算为中间输出。

画线算法:
考虑到光栅显示的固有限制,每种画线方法的目的都是产生理想线的最佳可行近似值。在进入特定的线条绘制算法之前,最好考虑一下对此类算法的一般需求。

主要设计标准如下。

  • 直线显示为直线。
  • 直线准确地开始和结束。
  • 显示的线条应该沿其长度具有恒定的亮度,与线条长度和方向无关。
  • 线条应迅速绘制。

方法一:直接方法:
在这个算法中,我们有两个端点。我们通过使用这两个点找到直线的斜率,并将斜率放入直线方程 y = mx + b 中。



然后我们通过让 x 和 y 等于 0 来找到 b 的值。在此之后,我们有 x 和 y 之间的关系。现在我们增加 x 的值并找到 y 的对应值。
这些值将是线的中间点。找到中间点后,我们将绘制这些点并画线。

图 – 直接法

方法 2:DDA(数字差分分析仪)算法:
该算法使用增量技术。这意味着我们可以通过使用过去的坐标作为指导来找到下一个坐标。在该方法中,分析像素点的差异,并根据分析绘制线。

我们将从初始位置开始,并通过寻找中间位置逐步到达结束位置。线的斜率将是 y 坐标差和 x 坐标差的比率。

Δy = ( y2 -y1 ), Δx = (x2 - x1) 
where, (x1, y1) and (x2, y2) are the endpoints.

数字差分分析器算法基于 Δx 和 Δy 的值。

Δy = m * Δx , Δx = Δy / m

斜率的值将是正值或负值。如果斜率的值为正,则 Δx 和 Δy 的值会增加,否则它们的值会减少。

(i).   If (m < 1): xN = x1 + 1 ,  yN = y1 + m  
         (ii).  If (m > 1): xN = x1 + 1 / m ,  yN = y1 +1  
         (iii).  If (m = 1): xN = x1 + 1 , yN = y1 + 1 

图 = DDA 算法

方法 3:Bresenham 的线生成:
另一种增量扫描转换程序是 Bresenham 算法。这种算法的一大优点是,它只使用整数计算。

这种方法的计算速度非常快,这就是为什么画线很快。我们将需要这两个端点,然后我们必须找到决策参数。

假设 (x1,y1) 和 (x2,y2) 是两个点。

So, dx = x2-x1 and dy = y2-y1

决策参数的公式为:di = 2dy – dx。

->   If di >= 0:
             Plotted points are,
             di +1 = di + 2dy - 2dx  ( i+1 is in base of d )
            xN = x1 + 1  ,  yN = y1 + 1  
            -> If di < 0:
             Plotted points are,
           di +1 = di + 2dy  ( i+1 is in base of d )
           xN = x1 + 1  , yN = y1 

Fig = Bresenham 线算法