2012-05-22 36 views
9

मैं बाल्टी पर वस्तुओं को वितरित करने के लिए जावास्क्रिप्ट के Math.random() फ़ंक्शन का उपयोग कर रहा हूं। बाद में, मैं एक कैनवास में बाल्टी प्रदर्शित करता हूं। मैं वस्तुओं को समान रूप से वितरित करने की अपेक्षा करता हूं, लेकिन (एकाधिक ब्राउज़रों में एकाधिक रीट्रीज़ के बाद भी), ऐसा लगता है कि वितरण बाईं ओर (शून्य के करीब) और अधिक दागदार होता है और दाएं ओर की ओर समान होता है (1 के करीब))। निम्नलिखित छवि enter image description here देखें।जावास्क्रिप्ट अजीब यादृच्छिक व्यवहार

क्या मैं इसे गलत कर रहा हूं, या जावास्क्रिप्ट का यादृच्छिक फ़ंक्शन चूसता है?

<html> 
    <head> 
     <script> 
      window.onload = function() { 
        var canvas = document.getElementById('canvas'); 
        var ctx = canvas.getContext('2d'); 
        var width = canvas.width; 
        var height = canvas.height;  
        var buckets = width; 
        var total = width*height*0.3; 
        var bucketList = []; 
        // initialized each bucket to 0 items 
        for(var i=0; i<buckets; ++i) { 
          bucketList[i] = 0; 
        } 
        // distribute all items over the buckets 
        for(var i=0; i<total; ++i) { 
         ++bucketList[Math.floor(Math.random()*buckets)]; 
        } 
        // draw the buckets 
        ctx.fillStyle = "rgb(200,0,0)"; 
        for(var i=0; i<buckets; ++i) { 
         ctx.fillRect (i, height-bucketList[i], i+1, height); 
        } 
      } 
      </script> 
    </head> 
    <body> 
      <canvas id="canvas" width="1000px" height="500px"/> 
    </body> 
</html> 
+3

'ctx.fillRect (i, ऊंचाई-बाल्टी सूची [i], i + 1, ऊंचाई);' ctx.fillRect (i, height-bucketList [i], 1, ऊंचाई) होना चाहिए; ' – xiaoyi

+1

+1 इस सवाल को पूरी तरह से पूछने के लिए। यह स्पष्ट रूप से शब्द दिया गया है, कोड पूर्ण है, अनुसरण करने में आसान है, और साफ है, और छवि बिल्कुल दिखाती है कि क्या हो रहा है। प्रश्न खुद ही दिलचस्प और प्रासंगिक है। धन्यवाद! –

+0

@AdamLiss उन्होंने संख्याओं को गलत तरीके से प्लॉट किया ... – xiaoyi

उत्तर

3

मुझे एक जवाब के साथ जवाब के बाद से सवाल पर मेरी टिप्पणी के लिए एक महान मौका अपने पड़ोसियों के बीच खो जाना है दो: नीचे दिए गए कोड है कि इस छवि को उत्पन्न करने के लिए इस्तेमाल किया गया था है।

तो, @xiaoyi द्वारा सुझाए गए फिक्स के साथ, तस्वीर मेरे लिए काफी यादृच्छिक लगती है: http://jsfiddle.net/TvNJw। मूल रूप से प्रश्न में सुझाए गए प्लॉटिंग रूटीन ने चित्रित बाल्टी चौड़ाई को i के रूप में गलत तरीके से बढ़ाया है, जबकि सभी बाल्टी में 1 की चौड़ाई होनी चाहिए। इसे आसानी से विभिन्न रंगों के साथ बाल्टी प्लॉट करके चित्रित किया जा सकता है।

संबंधित मुद्दे