2012-01-04 29 views
5

मेरे पास एक जावास्क्रिप्ट स्लाइडर है जो इसकी स्थिति के आधार पर 0 और 1 के बीच मान आउटपुट करता है। मैं उस मान को 100 और 1000 के बीच किसी अन्य पैमाने पर एक मान में परिवर्तित करना चाहता हूं, लेकिन 100 से 1000 के बीच डेटा बिंदुओं के एक सेट के वितरण के आधार पर।जावास्क्रिप्ट स्लाइडर भारित मान

उपयोग का मामला यह है कि मैं स्लाइडर बनना चाहता हूं जब संख्याओं का बहुत करीबी सेट होता है तो परिवर्तनों के प्रति कम संवेदनशील होता है। उदाहरण के लिए मान लीजिए कि ... पैमाने में मूल्यों हैं:

100, 200, 300, 500, 1000 

मूल्यों 100-500 उनके करीब वितरण की वजह से स्लाइडर के पहले 80% तक का समय लग सकता है, कहते हैं, इसलिए यह आसान चयन करने के लिए कर रही है उनके बीच।

यह गणना करने के लिए स्पष्ट रूप से गणितीय कार्य है, शायद मानक विचलन और गुणांक शामिल है। क्या कोई जानता है कि यह क्या है?

उत्तर

2

बड़े पैमाने पर मूल्यों के बीच रैखिक प्रक्षेप का उपयोग करना,

var bigValues = [100, 200, 300, 500, 1000]; 
var input; /* will vary in the range [0.0..1.0] */ 
var idx; /* index of nearest entry in bigValues below input */ 
var frac; /* fraction [0.0..1.0) in interval in bigValues */ 
var output; 
/* try some test values for input */ 
for (var i = 0; i<=20; i++) { 
    input = i * 0.05; 
    idx = Math.floor(input * (bigValues.length - 1)); 

    frac = (input - (idx)/(bigValues.length - 1)) * (bigValues.length - 1); 
    if (frac == 0) { /* no need to calculate */ 
     output = bigValues[idx]; 
    } 
    else { 
     output = bigValues[idx] + (bigValues[idx+1] - bigValues[idx]) * frac; 
    }; 
    document.write(input + ', ' + output + '<br />'); 
} 
+0

धन्यवाद, टी वह अच्छी तरह से काम कर रहा है। इस गणना को उलटाने का सबसे अच्छा तरीका क्या है? –

1

मुझे लगता है कि किसी भी तरह का बहुपद समीकरण, स्लाइडर मानों का उपयोग स्वतंत्र चर के रूप में करेगा। विशिष्ट समीकरण आपकी विशिष्ट आवश्यकताओं/वितरण पर निर्भर करेगा।

उदाहरण के लिए, -1 * (X^2) आप और भी उल्टे परवलय अगर X = 10 * [slider value]

1

मनमाने ढंग से मूल्यों के लिए मैं पट्टी प्रक्षेप किसी प्रकार का प्रस्ताव करता हूँ देना होगा। अंक, जहां दूसरी समन्वय "स्लाइडर पैमाने" में है का एक सेट करने के लिए मूल्यों के अपने सेट कन्वर्ट:

(100, 0.0), (200, 0.25), (300, 0.5), (500, 0.75), (1000, 1.0) 

अब बस अपनी पसंद एक चिकनी वक्र बनाने के लिए की पट्टी प्रक्षेप उपयोग करें, और एक बार आप की अवस्था आप अपने 100-1000 पैमाने पर मूल्य प्राप्त कर सकते हैं।

यदि आप किसी भी जटिल स्पलीन इंटरपोलेशन को लागू नहीं करना चाहते हैं, तो आप केवल एक रैखिक एक ले सकते हैं, जिसका अर्थ है कि 0.0 और 0.25 के बीच आपके स्लाइडर के किसी भी बिंदु के लिए आप 100 से 200 के बीच रैखिक रूप से इंटरपोलेट करते हैं, 0.25 और 0.5 इंटरपोलेट के बीच 200 से 300 के बीच और इतने पर।

0

की तरह कुछ (मैं क्या शिष्टाचार a comment में मूल प्रश्न के विपरीत पूछने के लिए है पता नहीं है, लेकिन मैं जोड़ देंगे यह एक अतिरिक्त जवाब के रूप में में कोड फिट करने के लिए)

my previous answer से पर जारी रखते हुए, सभी चर से पहले के रूप में घोषित के साथ:।

document.write('The other way round:<br />'); 

function findIntervalStart(n) { 
    for (var i = 1; i < bigValues.length; i++) if (n < bigValues[i]) return i-1; 
} 
/* try some test values */ 
for (var i = 1; i <= 21; i++) {  
    output = i * 50; 
    if (output >= bigValues[bigValues.length - 1]) { 
     input = 1; 
    } 
    else if (output <= bigValues[0]) { 
     input = 0; 
    } 
    else { 
    idx = findIntervalStart(output); 
     frac = (output - bigValues[idx])/(bigValues[idx + 1] - bigValues[idx]); 
     input = (idx + frac)/(bigValues.length - 1); 
    }; 

    document.write(output + ', ' + input + '<br />'); 
} 
संबंधित मुद्दे