计算机图形学 之 DDA直线算法(数值微分法)

简介: 计算机图形学 之 DDA直线算法(数值微分法)

1. 直线段的扫描转换算法

在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器

光栅显示器上就是用有限多个点去逼近直线, 那么这些有限个点,我们需要知道每一个像素点的坐标(都是整数)

求P0, P1的直线方程

y= kx + b

斜率为

       (y1 - y0)
k = ---------------   (x1 != x0)
       (x2 - x0)

假设 x 已知, 即从x的起点x0开始, 沿x方向 前进一个像素, (步长为1) ,就可以计算出y的值

因为像素都是整数值, 所以求出的y值还要进行整数处理


那么问题就转换成了, 如何 把数学上的一个点, 扫描转换成一个屏幕像素点

比如 p (1.7, 0.8) -> p (1, 0) 或者 p(1.7, 0.8) -> +0.5 -> p (2.2, 1.3) -> p(2, 1)


直线是最基本的图形, 一个动画或真实感图形往往需要调用成千上万次画线程序, 因此直线算法的好坏与效率直接影响图形的质量与速度


因为直线方程是 y = kx + b

为了提高效率, 把计算量减下来, 关键问题是如何把乘法取消


2. DDA直线算法

DDA算法引进图形学忠一个很重要的思想 ------增量思想

这个直线是

yi = k xi + b 那么x (i+1) 也满足该式子


y(i+1) = k x(i+1) + b 又因为 x(i+1) = xi + 1, 所以


y(i+1) = k (xi + 1) + b 小括号打开就是


y(i+1) = k xi + k + b 移项


y(i+1) = k xi + b + k = yi + k 到这里就相当于 y的变化就是x每移动一格, y就移动k单位,也就是斜率


所以我们每移动一次x轴, y轴就可以移动k个单位,这样就省去了乘法运算,大大提高了效率


如下所示的例子

k = 3 / 5 = 0.6 < 1

y(i+1) = yi + k

我们从(0, 0) 这个点开始, 每次x加一, y就加0.6 那么x = 1的时候, y = 0.6, 然后进行取整运算,

结果如下表

x y int(y+0.5)
0 0 0
1 0 + 0.6 1
2 0.6 + 0.6 1
3 1.2 + 0.6 2
4 1.8 + 0.6 2
5 2.5 + 0.6 3

当然以上的办法只适合画斜率小于1 的直线,如果斜率大于一, 那么我们需要把x和y对调顺序进行计算, 计算完再换过来

相关文章
|
4月前
|
算法
空间点与直线距离算法
空间点与直线距离算法
60 0
|
4月前
|
算法 C++
空间直线与球面相交算法
空间直线与球面相交算法
42 0
|
4月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
39 0
|
7月前
|
算法 图形学
【计算机图形学】实验一 DDA算法、Bresenham算法
【计算机图形学】实验一 DDA算法、Bresenham算法
291 3
|
7月前
|
算法 图形学
【计算机图形学】实验三 用Cohen-Sutherland裁剪算法实现直线段裁剪
【计算机图形学】实验三 用Cohen-Sutherland裁剪算法实现直线段裁剪
608 2
|
7月前
|
存储 算法 图形学
【计算机图形学】实验二 用扫描线算法实现多边形填充
【计算机图形学】实验二 用扫描线算法实现多边形填充
241 2
|
6月前
|
算法 计算机视觉
图像处理之霍夫变换(直线检测算法)
图像处理之霍夫变换(直线检测算法)
70 0
|
7月前
|
算法 数据可视化 vr&ar
【图形学】探秘图形学奥秘:DDA与Bresenham算法的解密与实战
【图形学】探秘图形学奥秘:DDA与Bresenham算法的解密与实战
136 0
|
7月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 149. 直线上最多的点数 算法解析
☆打卡算法☆LeetCode 149. 直线上最多的点数 算法解析
|
16天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
下一篇
DataWorks