说明:本文章系作者学习资料整理,不完善的地方请大家指正,谢谢!
在前一篇文章中,我将直线斜率的任何一种情况都进行了讨论,包括了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); //伪代码,依据具体的编程语言调用相应命令
}
}
}