直线绘制算法-数值微分法(DDA)
生活随笔
收集整理的這篇文章主要介紹了
直线绘制算法-数值微分法(DDA)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.DDA算法
直線在數學上是由無數個點構成,但是由于計算機顯示器是由有限個像素點組成。因此需要用有限個點去逼近無限個點,以實現直線在屏幕上顯示。如下圖所示,綠色線段為理想線段,黑色像素點為逼近的線段。
1.由于像素點的離散性,在x方向上,每次增量為,則直線段上前一個點與后一個點具有以下關系。
若已知直線段上一個點的坐標以及直線段斜率k,則可根據的關系推演出下一個點的y坐標。這樣做的優點是:僅可通過加法運算即可得到每一個y值,提升運算效率。
2.將得到的值四舍五入,用以確定y方向上哪一個像素點被點亮。具體做法為向下取整。
二.例題推導
上圖為11×11的像素點,以A點為原點建立直角坐標系,兩坐標分別為A(0,0)、B(10,8)。根據A、B兩點得出直線方程式:
| 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 |
最終將對應的像素點改成黑色即完成直線段的逼近。
三.拓展
左圖中直線段逼近結果僅有4個像素點,逼近效果差。究其原因是斜率k太大導致每變化1個單位,變化幅度大,導致像素點離散。改進的方法是將直線方程改寫成,通過每變化一個單位求其x值進行值逼近,逼近效果如右圖所示。
?結論:當斜率k的取值范圍為[-1,1],則通過方程式逼近。當斜率k范圍為(1,+∞]U[-∞,-1)時,通過方程式逼近。
總結
以上是生活随笔為你收集整理的直线绘制算法-数值微分法(DDA)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 引导修复 不是活动的_河南省视频数据修复
- 下一篇: python 浮点数最小值_PYTHON