2015-12-21 4 views
-2

Например, у меня есть диапазон расстояний от [0,15], и мне нужно сопоставить их к непрозрачности элементов из [0,1].Как нормализовать диапазон [a, b] до [c, d], где a отображает d, а b отображает на c

Элемент с расстоянием 0 должен иметь непрозрачность 1 и элемент с расстоянием 15 должны иметь непрозрачность 0.

Я пытался нормальной мин-макс нормализации, переводящий 0 в 0 и 15 к 1, но мне нужно наоборот.

формула которого я использовать для регулярного нормализации:

((currentValue - min)/ (max - min)) * (newMax - newMin) + newMin

+0

Какой язык вы используете? Чистый CSS не справляется с алгоритмами. – LoremIpsum

+0

javascript/angular – gaurav5430

+2

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это математическая проблема. –

ответ

0

(((CurrentValue - мин)/(макс - мин)) * (newMin - Newmax) + Newmax)

Необходимо сделать трюк!

+1

какое-то объяснение? – gaurav5430

2

Формула должна быть:

newMax - ((currentValue - min)/ (max - min)) * (newMax - newMin) 

((currentValue - min)/ (max - min)) * (newMax - newMin) рассчитать новое расстояние от корня до текущего значения, а также корень нового диапазона ставится на newMax, поэтому, мы получаем нашу формулу.

0

Вы должны .reverse() ваш массив диапазона в первую очередь. И оттуда он просто соответствует границам двух массивов. Возможно, так:

var distances = [0,1,2,3,4,5,6]; 
var opacity = {min: 0, max: 1}; 

var result = []; 

distances.reverse().forEach(function(distance){ 
    var step = opacity.min+((opacity.max-opacity.min)/distances.length); 
    var item = { 
    distance: distance, 
    opacity: opacity.min+distance*step 
    } 
    result.push(item); 
}); 

console.log(result); 
Смежные вопросы