1. 程式人生 > >中點畫線算法(任意斜率)

中點畫線算法(任意斜率)

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

中點畫線算法(任意斜率)