С для профессиональных программистов



         

Разработка функций построения диаграмм. - часть 5


j++ = strlen(names[i]*8+4);

fill_box(192,j,198,j+12,color);

j++ = 28; /* продвижение к следующему полю вывода */

color ++;

if ( color>3 ) color = 1;

/* Вычерчивание диаграммы */

void bargraph(data,num,offset,min,max,width)

double *data; /* массив данных */

int num; /* количество элементов в массиве */

int offset; /* расстояние между диаграммами */

int min,max; /* минимальное и максимальное выводимые значения */

int width; /* толщина линий */

int y,t,incr;

double norm_data,norm_ratio,spread;

char s[80];

static int color = 0;

int tempwidth;

/* всегда используйте различные цвета */

color++;

if ( color > 3 ) color = 1;

/* определение нормирующего множителя */

spread = (double)max-min;

norm_ratio = 180/spread;

incr = 280/num; /* определение промежутка между значениями*/

tempwidth = width;

for (t=0;t<num;++t)

norm_data = data[t];

/* подгонка отрицательных значений */

norm_data = norm_data-(double)min;

norm_data *= norm_ratio; /* нормирование */

y = (int)norm_data; /* преобразование типа */

do

line(179,((t*incr)+20+offset+width),179-y,

((t*incr)+20+offset+width),color);

width--;

 while(width);

width = tempwidth;

/* Вывод линии заданного цвета, используя базовый алгоритм

Брезенхама */

void line(startx,starty,endx,endy,color)

int startx,starty,endx,endy,color;

register int t,distance;

int x=0,y=0,delta_x,delta_y;

int incx,incy;

/* вычисление расстояний по обоим направлениям */

delta_x = endx - startx;

delta_y = endy - starty;

/* определение направлений увеличения координат, нулевое

увеличение соответствует либо вертикальной, либо

горизонтальной линии */

if ( delta_x > 0 ) incx = 1 ;

else  if (delta_x == 0 ) incx = 0;

else incx = -1;

if ( delta_y > 0 ) incy = 1 ;

else  if (delta_y == 0 ) incy = 0;

else incy = -1;

/* определение максимума изменения координат */

delta_x = abs(delta_x);

delta_y = abs(delta_y);

if ( delta_x > delta_y ) distance = delta_x;




Содержание  Назад  Вперед