[an error occurred while processing this directive]
|
//Алгоритм Брезенхема [Bresenham, 1965]
void DispBresenhamL ( TPoint* pFP, LCD_COLOR C, U8 OP) //
{
I16 x1 = (*(pFP+0)).X ;//точка начала
I16 y1 = (*(pFP+0)).Y ;//
I16 x2 = (*(pFP+1)).X ;//точка конца
I16 y2 = (*(pFP+1)).Y ;//
I16 dx = abs(x2 - x1);
I16 dy = abs(y2 - y1);
I16 e = 2 * dy - dx;
I16 i = 0;
I16 sx = ((x2 - x1) > 0) ? 1 : -1;
I16 sy = ((y2 - y1) > 0) ? 1 : -1;
U8 st = 0;
if (dx == 0 && dy == 0) { DispPixel (x1, y1, C, OP ); return; } // единственная точка
if (dx == 0 ) sx = 0;
if (dy == 0 ) sy = 0;
if(dy > dx)
{ st = 1;
x1 ^= y1; y1 ^= x1; x1 ^= y1;/* меняем x и y */
dx ^= dy; dy ^= dx; dx ^= dy;/* меняем dx и dy */
sx ^= sy; sy ^= sx; sx ^= sy;/* меняем sx и sy */
}
for( ;i < dx; i++)
{ if(st) DispPixel (y1, x1, C, OP ); else DispPixel (x1, y1, C, OP );
while(e >= 0)
{ y1 += sy;
e -= 2 * dx;
}
x1 += sx;
e += 2 * dy;
}
}
E-mail: info@telesys.ru