[an error occurred while processing this directive]
Алгоритм Брезенхема [Bresenham, 1965](+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено 03 марта 2006 г. 10:54
В ответ на: Вопрос по графике на ЖКИ - > отправлено glamur 03 марта 2006 г. 10:35

//Алгоритм Брезенхема [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: 
NoIX ключ Запомнить

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

Ссылка на URL: 
Название ссылки: 

URL изображения: 


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

E-mail: info@telesys.ru