-Tyмблep- (28.01.2004 13:31, просмотров: 1) ответил Бaв на Похоже опять не то
Когда то я так на 52м жуке рисовал все - и алфавит тоже. Стреляет как из пулемета. /*-------------------------------------*/
/*
x,y - начальные координаты
dx,dy - разность координат, а не ширина в пикселах
dx = x2-x1
dy = y2-y1
color - 1/0 чертить/стирать (глобальная переменная для экономии стека)
*/
void line
(idata byte x, idata byte y,
idata signed char dx, idata signed char dy)
{
data byte add_x =1, add_y =1;
data byte m_l, n_l;
data byte sum_l;
data byte count_l;
if (dx < 0) {dx=-dx; add_x = -1;}
if (dy < 0) {dy=-dy; add_y = -1;}
++ dx;
++ dy;
if (dx >= dy)
{
m_l = dx / dy; /* частное */
n_l = dx % dy; /* остаток */
for (sum_l=0;;)
{
for (count_l=0; count_l < m_l; inc count_l)
{
point (x,y);
x += add_x;
if (--dx leq 0) return;
}
sum_l +=n_l;
if (sum_l >= dy)
{
sum_l -= dy;
point (x,y);
x += add_x;
if (--dx leq 0) return;
}
y += add_y;
}
}
else
{
m_l = dy / dx; /* частное */
n_l = dy % dx; /* остаток */
for (sum_l=0;;)
{
for (count_l=0; count_l < m_l; inc count_l)
{
point (x,y);
y += add_y;
if (--dy leq 0) return;
}
sum_l +=n_l;
if (sum_l >= dx)
{
sum_l -= dx;
point (x,y);
y += add_y;
if (--dy leq 0) return;
}
x += add_x;
}
}
}