2010-08-04 1 views
-2

Я должен реализовать небольшой многоплановый графический элемент управления, который по сути представляет собой массив из 9 изображений, показанных один за другим. Конечная цель - выступать в роли мини-лидера.Таблицы поиска в C++

Теперь этот графический контроль будет получать различные целое число в диапазоне: от 5 до 25 или от 0 до 7 или от -9 до 9.

Если я буду использовать пропорцию - «правило трех» Я боюсь, что это не технически невозможно, потому что это может быть источником ошибок. Я предполагаю использовать некоторые таблицы поиска, но есть ли у кого-нибудь хороший совет для подхода?

Thnx

+0

Почему, по вашему мнению, вам нужна таблица поиска? Почему бы просто не вычислить индекс из диапазона и текущего значения? –

+0

Мини-слайдер состоит из 9 изображений, которые должны измениться, когда значение увеличивается или уменьшается. Действительно, imageId - это индекс, растущий. Но диапазон ввода от другого модуля может быть от 5 до 25 или от 0 до 7. На первый взгляд, я хотел использовать правило из трех, но это не нормально, и выбор, по-видимому, является таблицами поиска. – garzanti

+0

Просто для разъяснения того, что я понял: вам предоставляется набор изображений, которые должны отображаться последовательно (потенциально в обоих направлениях, но без прыжков). Вам также предоставляется ряд целых чисел, которые не должны начинаться с 0 и диапазон которых может быть больше 9. Как целые числа связаны с изображениями? Что вы называете «правилом трех», что не является решением? –

ответ

1

требуются Я не уверен, что посмотреть таблицы. Вы можете получить от вашего входного значения до индекса изображения от 0 до 9 пропорционально:

int ConvertToImageArrayIndex(int inputValue) 
{ 
    int maxInputFromOtherModule = 25; 
    int minInputFromOtherModule = 5; 


    // +1 required so include both min and max input values in possible range. 
    // + 0.5 required so that round to the nearest image instead of always rounding down. 
    // 8.0 required to get to an output range of 9 possible indexes [0..8] 

    int imageIndex = ((float)((inputValue-minInputFromOtherModule) * 8.0)/(float)(maxInputFromOtherModule - minInputFromOtherModule + 1)) + 0.5; 

    return imageIndex; 
} 
+0

Да ... вы правы. Изначально я тоже думал об этом подходе, но я был в ужасе от ошибок, которые могли возникнуть в результате округления результатов. – garzanti

0

да, таблица поиска является хорошим решением

int lookup[9] = {5, 25, ... the other values }; 
int id1 = floor(slider); 
int id2 = id1+1; 
int texId1 = lookup[id1]; 
int texId2 = lookup[id2]; 
interpolate(texId1, texId2, slider - float(id1)); 
+0

.. но после повторного чтения вашего вопроса я не уверен, что это то, что вы хотите – Calvin1602

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

  • Нет связанных вопросов^_^