Преобразование случайных чисел в координаты XY для графика

StackOverflow https://stackoverflow.com/questions/2095168

  •  21-09-2019
  •  | 
  •  

Вопрос

Мой профессор дал нам задание проверить разницу в времени запуска и размерах поиска с использованием линейных и двоичных алгоритмов, и данные должны быть графиками.

У меня есть методы поиска, размещающие размеры времени выполнения и массива в качестве точек в массиве, который затем отправляется в класс графства для построения построения. Мне нужно преобразовать эти точки данных в координаты XY раньше. Размер поиска-ось X, а время выполнения-ось Y

Поскольку размеры поиска фиксируются как кратные 128, и есть только 8 размеров, я использовал переключатель для расчета значения x, но ищу более эффективный способ преобразования времени выполнения в координаты.

Прямо сейчас я использую вложенные условные условия с 5 подобными:

if (y<=1000) {
    if (y<= 500) { 
        if (y<= 250) {
            newy= yaxis-32; }//equals to 250ms category
        else {
            newy= yaxis-(32*2); }//500ms category
   } 
else if (y<=750) {
    newy= yaxis-(32*3);} //750ms category
else {
    newy= yaxis-(32*4);} //1000ms category
} //end of the 1000ms tests

Прямо сейчас числа, которые превышают 5000 мс, требуют 7 тестов. Есть ли более эффективный способ назначить номер на основе численного размера?

Это было полезно?

Решение

Поскольку вы пытаетесь определить диапазон вашего измерения, вы можете разделить количество на размер диапазона, а затем вычисление числа, которое вы хотите показать на графике.

Кстати, в вашем коде вы допустили логическую ошибку, если значение y <= 1000 первое условие оценивается в True, а второе для y <= 750 никогда не будет оцениваться.

Также кажется, что чем выше диапазон значений, тем ниже точка графика. Это как задумано? (1000 -> ymax - 128 В то время как 1 -> ymax - 32)

Кроме того, если вы хотите сравнить значения с неровными диапазонами, вы также можете сделать что -то вроде поиска массива (псевдо -код):

int[] ranges = new int { 50, 500, 5000, 50000 };

for (int n = 0; n < ranges.length && value > ranges[n]; n++) {
}

int range = n;
int newy = yaxis - range * 32;

Обратите внимание, что индекс вне диапазона действует как диапазон, найденной для значения, которое больше, чем самое большое значение в вашем массиве.

Другие советы

Как насчет newy = yaxis - 32 * ((y/250)% 8);?

Я бы переформатировал ваш код на что -то более похожее на это:

newy = yaxis - 32 * ((y-1)/250 + 1);

Таким образом, вы рассчитываете множитель, а не выбираете его вручную.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top