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
方法 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