光栅图形学-中点画线法
生活随笔
收集整理的這篇文章主要介紹了
光栅图形学-中点画线法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在數(shù)學(xué)上,理想的直線是沒有寬度的,它是由無數(shù)個(gè)點(diǎn)構(gòu)成的集合。對直線進(jìn)行光柵化時(shí),只能在顯示器所給定的有限個(gè)像素組成的矩陣中,確定最佳逼近該直線的一組像素,并且按掃描線排序。
中點(diǎn)畫線法:通過觀察發(fā)現(xiàn),畫直線段的過程中,當(dāng)前像素點(diǎn)為(Xp,Yp),下一個(gè)像素點(diǎn)有兩種可選擇點(diǎn)P1(Xp+1,Yp)或P2(Xp+1,Yp+1)。若M=(Xp+1,Yp+0.5)為P1與P2的中點(diǎn),Q為理想直線與X=Xp+1垂線的交點(diǎn),當(dāng)M在Q的下方時(shí),P2應(yīng)為下一個(gè)像素點(diǎn),當(dāng)M在Q的上方時(shí),應(yīng)取P1為下一點(diǎn)。
運(yùn)行結(jié)果:
實(shí)現(xiàn)過程使用MFC實(shí)現(xiàn)的。
實(shí)現(xiàn)方法:
其中(x0,y0)為起始點(diǎn),(x1,y1)為終點(diǎn),color為顏色值。
void CDrawView::MiddleDrawline(int x0,int y0,int x1,int y1,int color) {//中點(diǎn)劃線算法//d>0 中點(diǎn)在直線上方 d<0 中點(diǎn)在直線下方CClientDC dc(this);int a,b,d1,d2,d,x,y;a=y0-y1; b=x1-x0; d=2*a+b; //二倍避免了浮點(diǎn)數(shù)的運(yùn)算d1=2*a; //中點(diǎn)在上面的增量d2=2*(a+b);//中點(diǎn)在下面的增量x=x0; y=y0; dc.SetPixel(x,y,color);while(x<x1){ if(d>0) //中點(diǎn)在上面 取下面的像素d+=d1;else //取上面的像素{d+=d2;y++;}x++;dc.SetPixel(x,y,color); //繪制像素 } }?
總結(jié)
以上是生活随笔為你收集整理的光栅图形学-中点画线法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时光轴全新导购网站购物新体验
- 下一篇: 软件工程师考试报名须知