[an error occurred while processing this directive]
|
/*-------------------------------------*/
/*
x,y - начальные координаты
dx,dy - разность координат, а не ширина в пикселах
dx = x2-x1
dy = y2-y1
color - 1/0 чертить/стирать Глобальный флаг для pointИспользовался "маленький" дисплей - все координаты уместились в byte
*/
void line (byte x, byte y, signed char dx, signed char dy)
{
byte add_x =1, add_y =1;
byte m_l, n_l;
byte sum_l;
byte count_l;if (dx < 0) {dx=-dx; add_x = -1;}
if (dy < 0) {dy=-dy; add_y = -1;}++ dx;
++ dy;sum_l=0;
if (dx >= dy)
{
m_l = dx / dy; /* частное */
n_l = dx % dy; /* остаток */for(;;)
{
count_l = m_l;
do
{
point (x,y);
x += add_x;
if (--dx == 0) return;
}while(--count_l);sum_l +=n_l;
if (sum_l >= dy)
{
sum_l -= dy;
point (x,y);
x += add_x;
if (--dx == 0) return;
}
y += add_y;
}
}
else
{
m_l = dy / dx; /* частное */
n_l = dy % dx; /* остаток */for (;;)
{r
count_l = m_l;
do
{
point (x,y);
y += add_y;
if (--dy == 0) return;
}while(--count_l);sum_l +=n_l;
if (sum_l >= dx)
{
sum_l -= dx;
point (x,y);
y += add_y;
if (--dy == 0) return;
}
x += add_x;
}
}}