光栅图形学之直线段扫描算法(中点画线法之代码)

 说明:本文章系作者学习资料整理,不完善的地方请大家指正,谢谢!

      在前一篇文章中,我将直线斜率的任何一种情况都进行了讨论,包括了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);     //伪代码,依据具体的编程语言调用相应命令

}

}

  

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值