




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、以前看到Bresenham畫線算法,直接拿來用,沒有去推導它,近日,參考一些資料,特整理其算法推導過程如下。各位大蝦如果知道其細節(jié),趕緊閃過,不用浪費時間了?;旧螧resenham畫線算法的思路如下: / 假設該線段位于第一象限內(nèi)且斜率大于0小于1,設起點為(x1,y1),終點為(x2,y2)./ 根據(jù)對稱性,可推導至全象限內(nèi)的線段.1.畫起點(x1,y1).2.準備畫下個點。x坐標增1,判斷如果達到終點,則完成。否則,由圖中可知,下個要畫的點要么為當前點的右鄰接點,要么是當前點的右上鄰接點.(即中點)3.畫點(U或者B).4.跳回第2步.5.結(jié)束.這里需要細化的是怎么判斷下個要畫的點為當前
2、點的右鄰接點還是當前點的右上鄰接點.設線段方程:ax+by+c=0(x1<x<x2,y1<y<y2)令dx=x2-x1,dy=y2-y1則:斜率-a/b = dy/dx.從第一個點開始,我們有F(x,1,y1) = a*x1+b*y1+c=0下面求線段ax+by+c=0與x=x1+1的交點:由a*(x1+1)+b*y+c = 0, 求出交點坐標y=(-c-a(x1+1)/b所以交點與M的y坐標差值Sub1 = (-c-a(x1+1)/b - (y1+0.5) = -a/b-0.5,即Sub1的初始值為-a/b-0.5。則可得條件當 Sub1 = -a/b-0.5>
3、0時候,即下個點為U.反之,下個點為B.代入a/b,則Sub1 = dy/dx-0.5.因為是個循環(huán)中都要判斷Sub,所以得求出循環(huán)下的Sub表達式,我們可以求出Sub的差值的表達式.下面求x=x1+2時的Sub,即Sub21.如果下下個點是下個點的右上鄰接點,則Sub2 = (-c-a(x1+2)/b - (y1+1.5) = -2a/b - 1.5故Sub差值Dsub = Sub2 - Sub1 = -2a/b - 1.5 - (-a/b-0.5) = -a/b - 1.代入a/b得Dsub = dy/dx -1;2.如果下下個點是下個點的右鄰接點,Sub2 = (-c-a(x1+2)/b
4、 - (y1+0.5) = -2a/b - 0.5故Sub差值Dsub = Sub2 - Sub1 = -2a/b - 0.5 - (-a/b-0.5) = -a/b. 代入a/b得Dsub = dy/dx;于是,我們有了Sub的初始值Sub1 = -a/b-0.5 = dy/dx-0.5,又有了Sub的差值的表達式Dsub = dy/dx -1 (當Sub1 > 0)或 dy/dx(當Sub1 < 0).細化工作完成。于是pcode可以細化如下: / Pcode for Bresenham Line/ By SoRoManx=x1;y=y1;dx = x2-x1;dy = y2-
5、y1;Sub = dy/dx-0.5; / 賦初值,下個要畫的點與中點的差值DrawPixel(x, y); / 畫起點while(x<x2) x+; if(Sub > 0) / 下個要畫的點為當前點的右上鄰接點 Sub += dy/dx - 1; /下下個要畫的點與中點的差值 y+; / 右上鄰接點y需增1 else/ 下個要畫的點為當前點的右鄰接點 Sub += dy/dx; / 畫下個點DrawPixel(x,y);PS:一般優(yōu)化:為避免小數(shù)轉(zhuǎn)整數(shù)以
6、及除法運算,由于Sub只是用來進行正負判斷,所以可以令Sub = 2*dx*Sub = 2dy-dx,則相應的DSub = 2dy - 2dx或2dy.思考1:如果Sub = 0時,會產(chǎn)生取兩個點都可以的問題。這個問題還沒深入。/*/*液晶屏 點陣屏 繪制直線函數(shù) 采用BresenHam算法void draw_line(uint x1,uint y1,uint x2,uint y2,uint linecolor )int temp;int x,y;int dx,dy,e;if(x1>x2)/交換坐標 保證x1始終是起點 temp=x1;x1=x2;x2=temp;
7、 temp=y1;y1=y2;x1=temp;dx=x2-x1;dy=y2-y1;x=x1;y=y1;if(dy=0)/斜率為0 for(temp=x1;temp<x2;temp+) draw_point(temp,y1,linecolor);if(dy>0)/斜率小于0 if(dy<dx)/斜率大于-1 e=-dx; for (temp=0; temp<dx; temp+)
8、160; draw_point (x, y, linecolor); x+; e=e+2*dy; if (e>=0) y+; e=e-2*dx;
9、60; else /斜率小于-1 e=-dy; for (temp=0; temp<dy; temp+) draw_point (x, y, linecolor); y+; e=e+2*dx;
10、60; if (e>=0) x+; e=e-2*dy; if(dy<0)/正斜率 dy=-dy; if(dy<dx)/斜率小于1 e=-dx; for (temp=0; te
11、mp<dx; temp+) draw_point (x, y, linecolor); x+; e=e+2*dy; if (e>=0) y-; e=e-2*dx; else e=-dy; for (temp=0; temp<dy; temp+) draw_point (x, y, linecolor); y-;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開放社區(qū)食堂管理辦法
- 西安代理記賬管理辦法
- 遵義養(yǎng)豬日常管理辦法
- 大眾服裝陳列培訓課件
- 肝臟腫瘤護理課件
- 員工培訓理論課件
- 佛山春招數(shù)學試卷
- 二模高質(zhì)量數(shù)學試卷
- 高三沖刺班高中數(shù)學試卷
- 肘關節(jié)脫位護理課件
- 2024年 金澤鎮(zhèn)專職村務工作者招錄考試真題試題含答案
- 《基本樂理》師范與學前教育專業(yè)基本樂理相關知識全套教學課件
- 2025年內(nèi)蒙古自治區(qū)包頭市東河區(qū)第二中學英語八年級第二學期期末復習檢測模擬試題含答案
- 2025年安徽省中考物理試題(原卷版)
- 2025年四川省達州市中考英語真題(原卷版)
- 2025-2026年中國臺球產(chǎn)業(yè)消費趨勢報告
- 2025年高考英語全國新高考II卷深度解讀及答案詳解
- 2024年證券市場基本法律法規(guī)真題及答案
- 湖南省2025年高考公安院校公安專業(yè)考生檔案審核表
- 歷史●湖北卷丨2021年湖北省普通高中學業(yè)水平選擇性考試歷史試卷及答案
- 百貨會員管理體系優(yōu)化總結(jié)
評論
0/150
提交評論