2014-10-06 2 views
0

У меня есть программа ncurses, которая печатает гистограмму для использования полосы пропускания. Я бы хотел, чтобы он масштабировался до минимума графика, а не всегда 0 (поэтому график начинался с минимальной скорости, а не с нуля).Как масштабировать график минимума для программы гистограммы ncurses

График в основном печатается так:

if (value/max * lines < currentline) 
    addch('*'); 
else 
    addch(' '); 

Как я могу изменить расчет, так что будет масштабироваться минимальный график?

Вот полная функция график печати:

void printgraphw(WINDOW *win, char *name, 
     unsigned long *array, unsigned long max, bool siunits, 
     int lines, int cols, int color) { 
    int y, x; 

    werase(win); 

    box(win, 0, 0); 
    mvwvline(win, 0, 1, '-', lines-1); 
    if (name) 
     mvwprintw(win, 0, cols - 5 - strlen(name), "[ %s ]",name); 
    mvwprintw(win, 0, 1, "[ %s/s ]", bytestostr(max, siunits)); 
    mvwprintw(win, lines-1, 1, "[ %s/s ]", bytestostr(0.0, siunits)); 

    wattron(win, color); 
    for (y = 0; y < (lines - 2); y++) { 
     for (x = 0; x < (cols - 3); x++) { 
      if (array[x] && max) { 
       if (lines - 3 - ((double) array[x]/max * lines) < y) 
        mvwaddch(win, y + 1, x + 2, '*'); 
      } 
     } 
    } 
    wattroff(win, color); 

    wnoutrefresh(win); 
} 

ответ

1

Вам нужна min всех значений в дополнение к max. Ваше состояние будет тогда:

if ((value - min)/(max - min) * lines < currentline) 
    addch('*'); 
else 
    addch(' '); 

(Фактор (value - min)/(max - min) находится в диапазоне от 0 до 1 и требует арифметики с плавающей точкой.)

+0

Спасибо! Это именно то, чего я пытался достичь. –

Смежные вопросы