光柵圖形學之直線段掃描算法(中點畫線法之代碼)

 說明:本文章系作者學習資料整理,不完善的地方請大家指正,謝謝!

      在前一篇文章中,我將直線斜率的任何一種情況都進行了討論,包括了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-x, dy = y1-y;

    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);     //僞代碼,依據具體的編程語言調用相應命令

}

}

  

}

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章