void swap(uint16 *x0,uint16 *y0,uint16 *x1,uint16 *y1)
{
uint16 x,y;
x = *x1;
*x1 = *x0;
*x0 = x;
y = *y1;
*y1 = *y0;
*y0 = y;
}
void GUI_DrawLine(uint16 x0,uint16 y0,uint16 x1,uint16 y1,uint16 color)
{
int16 dx,dy,d;
uint16 x,y;
if( x0 > x1) /* 保证x0<x1,即x0为x1左边的点。*/
{
swap(&x0,&y0,&x1,&y1);
}
dx = x1 - x0;
dy = y1 - y0;
if( dx == 0) /* 斜率为无穷大,画直竖线 */
{
LCD_DrawVLine(x0,y0,y1,color);
return;
}
if( dy == 0) /*斜率为零,画水平线 */
{
LCD_DrawHLine(x0,y0,x1,color);
return;
}
x = x0;
y = y0;
GUI_DrawPoint(x,y,color);
if((dx>=dy)&&(dy>0)) /* when 0<k<=1 */
{
d = (dy*2) - dx;
while(x<x1)
{
if(d > 0)
{
d += (dy - dx)*2; /* 选择NE点 */
x++;
y++;
}
else
{
d += dy*2; /* 选择N点 */
x++;
}
GUI_DrawPoint(x,y,color);
}
return;
}
if( (dy>dx)&&(dy>0)) /* when k>1 */
{
d = dy - (dx*2);
while(y<y1)
{
if(d < 0)
{
d += (dy - dx)*2; /* 选择 NE 点 */
x++;
y++;
}
else
{
d += (-dx)*2; /* 选择N点 */
y++;
}
GUI_DrawPoint(x,y,color);
}
return;
}
if((dx>=ABS(dy))&&(dy<0)) /* when -1=<k<0 */
{
d = (dy*2) + dx; /* d = 2a-b */
while(x<x1)
{
if(d < 0)
{
d += (dy+dx) * 2; /* 选择SE点 */
x++;
y--;
}
else
{
d += dy*2; /* 选择S点 */
x++;
}
GUI_DrawPoint(x,y,color);
}
return;
}
if( (ABS(dy)>dx)&&(dy<0)) /* when k<-1 */
{
d = dy + (dx*2); /* d = a - 2b */
while(y>y1)
{
if(d > 0)
{
d += (dy + dx)*2; /* 选择 SE 点 */
x++;
y--;
}
else
{
d += (dx)*2; /* 选择S点 */
y--;
}
GUI_DrawPoint(x,y,color);
}
return;
}
}
相关推荐
TDA2030A功放电路
宽 VIN 范围降压型稳压器仅消耗 2.8µA 输入电流
44b0一个寻址的问题,请高手指点迷径...
TDA2020功放电路
日立3D全息显示设备展示
PowerCo在萨尔茨吉特启动欧洲电池单元生产
那位大师帮我算几个PCM编码样点,有谢!!!
如何编写 Linux 设备驱动程序
拍个马屁
近距离感受罗德与施瓦茨厚重企业魅力
CEATEC 2011日本东京高新技术博览会的几个亮点
嵌入式系统设计编程文档
轻型驱动微米级电机和齿轮组
住友3M展示投影式静电容量式触摸面板
嵌入式系统文章集粹1
amd29LvMtd.c文件问题
中国芯片整合升级:华虹收购华力97.5%股权,继中芯国际此前的举动之后
中国维持2026年设备换新:最高补贴500元人民币;智能手机,智能眼镜聚焦
那位大师帮我算几个PCM编码样点,有谢!!!
TDA2009功放电路
嵌入式系统及实时软件开发
博世Sensortec和Espressif扩展传感器平台与ESP SensairShuttle协同工作
深入理解Linux虚拟内存管理原书光盘1
TDA2040功放电路
中国半导体研究在内存和集成电路设计方面取得多项突破
比亚迪新晋全球纯电销冠!特斯拉2025年交付量跌逾8%至164万辆
TDA2008功放电路
据报道,中国CSOT将首次为三星Galaxy A57提供灵活的OLED设备
通过智能NoC自动化打破SoC设计的壁垒
何时、何地及为何使用芯片组