2016-11-28 4 views
2

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

Первое значение массива будет иметь значение где-то 7,0-9,9 (фотошоп использует 9.9). Среднее значение, значение массива 100, должно быть точно равно 1.0. Значение массива 200 будет около 0,01.

Может ли кто-нибудь сказать мне, какой алгоритм использовать?

Я пытаюсь сделать массив с использованием «проб и ошибок» в каком-либо тестовом коде, основанном на функции Power (i, 2.2), но не получил нигде.

Я использую Delphi. Я не спрашиваю код, хотя, просто управляйте в правильном направлении. Любая помощь приветствуется.

+0

Вместо такого _lookup table_, я бы просто использовать функцию для вычисления непосредственно. – NGLN

ответ

0

Почему бы не просто поразмыслить и разделить его на количество шагов.

Ex. 9.9-1/100, тогда вы знаете, что сумма увеличивается.

Я сделал простой пример JavaScript, чтобы показать, что я имею в виду:

doWork = function() { 

    var result = ''; 
    var first = 9.9; 
    var middle = 1; 
    var last = 0.01; 

    var firstSteps = (first - middle)/99; 
    var lastSteps = (middle - last)/100; 

    result = result + 'first=' + firstSteps + '<br>'; 
    result = result + 'last=' + lastSteps + '<br>'; 

    var value = first; 
    for (var i = 1; i < 201; i++) { 
     var showValue = Math.round(value * 100)/100; 
     result = result + i + ' => ' + showValue + '<br/>'; 
     if (i > 99) { 
      value = value - lastSteps; 
     } 
     else if (i == 99) { 
      value = middle; 
     } 
     else { 
      value = value - firstSteps; 
     } 
    } 

    document.getElementById('info').innerHTML = result; 

} 

Вот скрипка: https://jsfiddle.net/tuv5vfst/

4

Это не совсем программирования вопрос, но один из математики.

Предположим, что квадратичная функция имеет вид y = ax + bx + c.

заливка в трех пар значений известных:

9.9 = a + b + c 
1 = 10000a + 100b + c 
0.01 = 40000a + 200b + c 

трех уравнений + три unknows = решаемые с помощью простой замены.

9.9 = a + b + c 
c = 9.9 - a - b 

1 = 10000a + 100b + c 
1 = 10000a + 100b + 9.9 - a - b 
1 = 9999a + 99b + 9.9 
1 - 99b = 9999a + 9.9 
-99b = 9999a + 9.9 - 1 
-99b = 9999a + 8.9 
b = -101a - 8.9/99 

0.01 = 40000a + 200b + c 
0.01 = 40000a + 200b + 9.9 - a - b 
0.01 = 39999a + 199b + 9.9 
0.01 = 39999a + 199(-101a - 8.9/99) + 9.9 
0.01 = 39999a - 20099a - 17.89 + 9.9 
0.01 = 19900a - 7.99 
0.01 - 19900a = -7.99 
-19900a = -8 
a = 8/19900 
a = 0.000402 

b = -101a - 8.9/99 
b = -808/19900 - 8.9/99 
b = -0.1305 

c = 9.9 - a - b 
c = 10.0301 

Другими словами: Gamma = 0.000402 * Pos^2 - 0.1305 * Pos + 10.0301

+0

Вы приветствуете [здесь] (http://chat.stackoverflow.com/rooms/129020/rad-studio-for-android) – Sami

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