直线绘制算法-数值微分法(DDA)
一.DDA算法
直線在數(shù)學(xué)上是由無數(shù)個點(diǎn)構(gòu)成,但是由于計(jì)算機(jī)顯示器是由有限個像素點(diǎn)組成。因此需要用有限個點(diǎn)去逼近無限個點(diǎn),以實(shí)現(xiàn)直線在屏幕上顯示。如下圖所示,綠色線段為理想線段,黑色像素點(diǎn)為逼近的線段。
1.由于像素點(diǎn)的離散性,在x方向上,每次增量為,則直線段上前一個點(diǎn)與后一個點(diǎn)具有以下關(guān)系。
若已知直線段上一個點(diǎn)的坐標(biāo)以及直線段斜率k,則可根據(jù)的關(guān)系推演出下一個點(diǎn)的y坐標(biāo)。這樣做的優(yōu)點(diǎn)是:僅可通過加法運(yùn)算即可得到每一個y值,提升運(yùn)算效率。
2.將得到的值四舍五入,用以確定y方向上哪一個像素點(diǎn)被點(diǎn)亮。具體做法為向下取整。
二.例題推導(dǎo)
上圖為11×11的像素點(diǎn),以A點(diǎn)為原點(diǎn)建立直角坐標(biāo)系,兩坐標(biāo)分別為A(0,0)、B(10,8)。根據(jù)A、B兩點(diǎn)得出直線方程式:
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| y | 0 | 0.8 | 1.6 | 2.4 | 3.2 | 4.0 | 4.8 | 5.6 | 6.4 | 7.2 | 8 |
| int(y+0.5) | 0 | 1 | 2 | 2 | 3 | 4 | 5 | 6 | 6 | 7 | 8 |
最終將對應(yīng)的像素點(diǎn)改成黑色即完成直線段的逼近。
三.拓展
左圖中直線段逼近結(jié)果僅有4個像素點(diǎn),逼近效果差。究其原因是斜率k太大導(dǎo)致每變化1個單位,變化幅度大,導(dǎo)致像素點(diǎn)離散。改進(jìn)的方法是將直線方程改寫成,通過每變化一個單位求其x值進(jìn)行值逼近,逼近效果如右圖所示。
?結(jié)論:當(dāng)斜率k的取值范圍為[-1,1],則通過方程式逼近。當(dāng)斜率k范圍為(1,+∞]U[-∞,-1)時,通過方程式逼近。
總結(jié)
以上是生活随笔為你收集整理的直线绘制算法-数值微分法(DDA)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 引导修复 不是活动的_河南省视频数据修复
- 下一篇: Oracle 11G 安装详解