- 打卡等级:以坛为家II
- 打卡总天数:503
- 最近打卡:2025-06-15 10:34:02
金牌会员
- 积分
- 1670
|
发表于 2025-5-23 21:38:10
|
显示全部楼层
版主好,用你的程序验证了一下,很好。发现有个BUG,不知是我没搞懂,还是程序的问题,还请版主验证一下。
任意两点画线函数LCD_Line(5,5,175,175,12)运行正常,如果改成LCD_Line(5,50,175,5,12)就不对了。换言之就是画线函数坐标只能是从左上角往右下角画,如果坐标从左下角往右上角画,效果是整个区域填充了。即该函数只能是X2≥X1,Y2≥Y1。要画一条左低右高的线该如何修改该画线函数呢?
源画线函数:
/* 任意两点画直线函数 调用参数:起始点X0列Y0行,结束点X1列Y1行,Color色 */
void LCD_Line(unsigned int X1,unsigned int Y1,unsigned int X2,unsigned int Y2,unsigned char Color)
{ unsigned int i;
float r;
if(X1==X2) /* 垂直线 */
{ if(Y1==Y2){ LCD_Point(X1,Y1,Color); return; /* 画点 */ }
if(Y1<Y2)LCD_LineV(X1,Y1,Y2-Y1+1,Color);
else LCD_LineV(X1,Y2,Y1-Y2+1,Color); return;
}
if(X1>X2){ i=X1;X1=X2;X2=i;i=Y1;Y1=Y2;Y2=i; } /* 交换坐标 */
if(Y1==Y2){ LCD_LineH(X1,Y1,X2-X1,Color);return; } /* 画水平线 */
r=(float)(Y2-Y1)/(float)(X2-X1); /* 计算斜率 */
if(r>=-1&&r<=1) /* 与水平夹角<=45度 */
for(i=0;i<(X2-X1);i++)LCD_Point(X1+i,Y1+i*r,Color); /* 画出斜线 */
else /* 斜率>1 */
{ r=1/r;
if(r>0) /* 与水平夹角>45度 */
for(i=0;i<(Y2-Y1);i++)LCD_Point(X1+i*r,Y1+i,Color); /* 画出斜线 */
else
{ r=-r;
for(i=0;i<(Y1-Y2);i++)LCD_Point(X1+i*r,Y1-i,Color); /* 画出斜线 */
}
}
}
|
|