Функция рисования линии была мной значительно переработана и прооптимизированна, но все же есть еще простор для
творчества.
void LineBrez(int x1,int y1,int x2,int y2){
int xer=0,yer=0;
int delx=abs(x2-x1);
int dely=abs(y2-y1);
int max=delx>dely?delx:dely; // в max записывается наибольшее из двух delx, dely
char vx=x2>=x1?1:-1; // Прирост по x
char vy=y2>=y1?1:-1; // Прирост по y
if(delx>dely) // Если delx>dely, то x будет изменятся каждую итерацию
for(int i=0;i<max;i++){
p_Buffer[y1*scr_Width+x1]=Current_Color;
x1+=vx;
yer+=dely;
if(yer>=max){
yer-=max;
y1+=vy;
}
}
else
if(dely>delx) // Если dely>delx, то y будет изменятся каждую итерацию
for(int i=0;i<max;i++){
p_Buffer[y1*scr_Width+x1]=Current_Color;
y1+=vy;
xer+=delx;
if(xer>=max){
xer-=max;
x1+=vx;
}
}
else
if(delx==dely) // Если delx=dely то изменяются обе координаты
for(int i=0;i<max;i++){
p_Buffer[y1*scr_Width+x1]=Current_Color;
x1+=vx;
y1+=vy;
}
}
|
scr_Width это ширина экрана, Current_Color текущий цвет, 1 или несколько байт зависит от реализации. В данном
алгоритме существуют 3 цикла, которые специализированы под определенный случай, что теоритически увеличивает работу
функции, на практике мной это не проверялось.
|