#if 0
| 80
| 90
| 100
| 120
| 140
|
__20__40__60__80__100______________
#endif
const GUI_POINT M_DrawPolyLineBuf[10]= {
{20,100},
{40,80},
{60,140},
{80,90},
{100,120},
};
GUI_DrawPolyLine(M_DrawPolyLineBuf,5,0,0);
主要分析分析这段代码算法
void GL_DrawLine1Ex(int x0, int y0, int x1, int y1, unsigned * pPixelCnt)
{
int xdiff = x1 - x0;
int ydiff = y1 - y0;
int xdiffby2;
int i;
char XYSwapped = 0;
int Dir;
int PixelCnt = * pPixelCnt;
int y;
//各种检查
xdiffby2 = xdiff / 2;//为了进位
if (ydiff < 0)
{
xdiffby2 = -xdiffby2;
}
/* Draw pixel by pixel solid*/
if (GUI_Context.LineStyle == GUI_LS_SOLID)
{//算法
for (i = 0; i <= xdiff; i++)
{
I32 l = ((I32)ydiff) * i + xdiffby2;//-20*i+10
if (ABS(l) < 32767)
y = (y0 + ((int)l) / xdiff) ;//y0 + (ydiff*i+xdiffby2)/xdiff; y0 + (-20*i+ -10)/20 0~20
else
y = (y0 + l / xdiff);
if (!XYSwapped)//100,99,98,97,96,95****80
{
LCD_HL_DrawPixel(x0+ i , y);//LCD_DrawPixel LCD_L0_SetPixelIndex
} else
{
LCD_HL_DrawPixel(y, x0 + i);
}
}
/* Draw pixel by pixel with fill style */
} else
{
}
}