中點畫線算法(任意斜率)
阿新 • • 發佈:2019-03-02
poi ant col 其他 htm lse href while size
基本原理
在畫直線段的過程中,當前像素點為(xp ,yp ),下一個像素點有兩種可選擇點P1(xp +1,yp )或P2(xp +1,yp +1)。若M=(xp +1,yp +0.5)為P1與P2之中點,Q為P理想直線與x=xp +1垂線的交點。當M在Q的下方,則P2應為下一個像素點;M在Q的上方,應取P1為下一個像素點。
在斜率0<=k<=1的時候,實現代碼如下(書本代碼):
void MidpointLine(int x0,int y0,int x1,int y1,int color)
{
int a,b,d1,d2,d,x,y;a=y0-y1,b=x1-x0,d=2*a+b;
d1=2*a,d2=2*(a+b);
x=x0,y=y0;
Drawpixel(x,y,color);
while (x<x1)
{
if (d<0)
{ x++,y++,d+=d2;}
else
{ x++,d+=d1; }
Drawpixel(x,y,color);
}
}
對於其他斜率,我們可以推出如下關系:
實現代碼如下:
備註:Drawpixel(x,y,color);是pDC->SetPixel(x,y,crColor);的意思
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net
中點畫線算法(任意斜率)