[an error occurred while processing this directive]
А у меня так получилось:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Тумблер 23 сентября 2006 г. 19:09
В ответ на: Подскажите функцию или алгоритм рисования линии. Чтобы не изобретать велосипед... отправлено <font color=gray>M@RS</font> 23 сентября 2006 г. 10:27


/*-------------------------------------*/
/*
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;
}
}

}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание