计算机图形学笔记------直线的扫描转换
目的
在数字设备上绘制一条直线,其过程为给定直线的起点和终点,在光栅显示器的二维点阵中确定一组点最佳逼近所给直线。
绘制直线的本质是确定点序列。
数值微分法(DDA)
算法原理
直线的一阶导数连续,对应微分增量成比例,可以使用当前位置 ( x i , y i ) (x_i,y_i) (xi,yi)分别加上两个小增量 ε ∗ Δ x \varepsilon*\Delta x ε∗Δx与 ε ∗ Δ y \varepsilon*\Delta y ε∗Δy即可求出相应的 ( x i + 1 , y i + 1 ) (x_{i+1},y_{i+1}) (xi+1,yi+1)( ε \varepsilon ε取值极小),即:
y i + 1 = y i + ε ∗ Δ y y_{i+1}=y_i+\varepsilon*\Delta y yi+1=yi+ε∗Δy
x i + 1 = x i + ε ∗ Δ x x_{i+1}=x_i+\varepsilon*\Delta x xi+1=xi+ε∗Δx
相应的直线的斜率为:
d y d x = Δ y Δ x = Y 1 − Y 0 X 1 − X 0 = k \frac{dy}{dx}=\frac{\Delta y}{\Delta x}=\frac{Y_1-Y_0}{X_1-X_0}=k dxdy=ΔxΔy=X1−X0Y1−Y0=k
近似拟合
由于在实际的机器中我们无法实现那么高的精度,所以我们选择 ε = 1 m a x ( ∣ Δ x ∣ , ∣ Δ y ∣ ) \varepsilon=\frac{1}{max(|\Delta x|,|\Delta y|)} ε=max(∣Δx∣,∣Δy∣)1,将对应的 ε ∗ Δ x \varepsilon*\Delta x ε∗Δx或 ε ∗ Δ y \varepsilon*\Delta y ε∗Δy变为单位步长,对应有不同斜率有两种情况:
一种情况为: m a x ( ∣ Δ x ∣ , ∣ Δ y ∣ ) = ∣ Δ x ∣ max(|\Delta x|,|\Delta y|)=|\Delta x| max(∣Δx∣,∣Δy∣)=∣Δx∣,即 ∣ k ∣ < = 1 |k|<=1 ∣k∣<=