說明:本文章系作者學習資料整理,不完善的地方請大家指正,謝謝!
在前一篇文章中,我將直線斜率的任何一種情況都進行了討論,包括了k在0和1之間,k在-1和0之間,以及k大於0,還有k小於-1,一共四種情況。
現在給出代碼如下:
void MidpointLine(int x0,int x1,int y0,int y1) { //我在次討論的前提是x1>x0
int dx = x1-x0 , dy = y1-y0 ;
int x=x0 , y=y0;
//第一種情況
if (dy/dx > 0&& dy/dx <= 1) {
int d0 = dx-2*dy,d1 = -2*dy,d2 = 2*(dx - dy);
while (x<x1){
if(d0 > 0) { x++; d0 += d1;}
else { x++;y++; d0 += d2; }
drawpixel(x,y,color); //僞代碼,依據具體的編程語言調用相應命令
}
}
//第二種情況
else if (dy/dx >= -1&& dy/dx <= 0) {
int d0 = -dx - 2*dy, d1 = -2*(dx+dy), d2 = -2*dy;
while(x < x1) {
if(d0 > 0) { x++; y- -; d0 += d1;}
else { x++; d0 += d2;}
drawpixel(x,y,color); //僞代碼,依據具體的編程語言調用相應命令
}
}
//第三種情況
else if(dy/dx > 1) {
int d0 = 2*dx - dy,d1 = 2*(dx - dy), d2=2*dx;
while (y < y1) {
if(d0 >0) { x++;y++;d0 += d1;}
else { y++; d0 += d2;}
drawpixel(x,y,color); //僞代碼,依據具體的編程語言調用相應命令
}
}
//第四種情況
else if (dy/dx < -1) {
int d0 = -2*dx - dy,d1 = -2*dx, d2 = -2*(dx+dy);
while (y > y1) {
if(d0 > 0) {y - - ;d0 += d1;}
else { y - -; x++; d0 += d2;}
drawpixel(x,y,color); //僞代碼,依據具體的編程語言調用相應命令
}
}
}