void Line(unsigned char s_x,unsigned char s_y,unsigned char e_x,unsigned char e_y) { char Offset_x,Offset_y,Offset_k = 0; char Err_d = 1; if(s_y>e_y) { Offset_x = s_x; s_x = e_x; e_x = Offset_x; Offset_x = s_y; } Offset_x = e_x-s_x; Offset_y = e_y-s_y; Write_Dot_LCD(s_x,s_y,BMP_Color); if(Offset_x<=0) { Offset_x = s_x-e_x; Err_d = -1; } if(Offset_x>Offset_y) { Offset_k += Offset_y; // while(s_x!=e_x) // { // if(Offset_k>0) // { // s_y+=1; // Offset_k += (Offset_y-Offset_x); // } else Offset_k += Offset_y; // s_x+=Err_d; // if(s_x>Dis_X_MAX||s_y>Dis_Y_MAX) break; Write_Dot_LCD/*Writ_Dot*/(s_x,s_y,BMP_Color); } } else { Offset_k += Offset_x; // while(s_y!=e_y) // { if(Offset_k>0) // { // s_x+=1; // Offset_k += (Offset_x-Offset_y); // } // else Offset_k += Offset_x; // s_y+=Err_d; if(s_x>Dis_X_MAX||s_y>Dis_Y_MAX) break; Write_Dot_LCD/*Writ_Dot*/(s_x,s_y,BMP_Color); } } }
我一直都用 y=ax+b的算法,看到代码中有注释的部分,直线的算法,不太明白,哪位高手能给指点一二?谢谢了! |