基本原理
以0<斜率k<1的斜线为例,红点为判定为依据点,绿点是应绘制的像素点,直线在红点下方则y坐标不增,反之y坐标自增1。
一、算法1思路
- 根据两点坐标算出斜率k=dy/dx(通常为浮点数)
- 斜线与x=x1的交点y坐标y=x1+k ->往后自增k
- y0、y1中点y坐标 middle=x1+0.5 ->往后根据两者位置增1或不变
- 判别式:y>=middle
参考代码:
void OLED_ShowLine(u8 x1,u8 y1,u8 x2,u8 y2)
{
u8 dx = x2 - x1;
u8 dy = y2 - y1;
float k = (float)(dy) / dx;
u8 x = x1 + 1; //直线与x=x1的交点的x坐标
float y = k; //直线与x=x1的交点的y坐标,由于在判别式中y1相消,可以去掉y1
float middle = 0.5; //第一个中点,由于在判别式中y1相消,可以去掉y1
OLED_DrawPoint(x1,y1,1);//画起点
OLED_DrawPoint(x2,y2,1);//画终点
while( x < x2 ) //中间线段
{
if(y >= middle) //若直线点在中点或之上
{