2012-05-22 7 views
9

Öğeleri kovalar üzerinden dağıtmak için JavaScript'in Math.random() işlevini kullanıyorum. Daha sonra, kovaları bir tuvalde görüntülerim. Öğelerin eşit olarak dağıtılmasını beklerdim, ancak (birden çok tarayıcıda birden çok yeniden deneme yaptıktan sonra bile), dağıtım çok daha iyi bir şekilde solda (sıfıra yakın) tanecikli ve sağa doğru daha düzgün hale gelir gibi görünüyor (1'e yakın)). Aşağıdaki resme bakın enter image description here.Javascript garip rasgele davranış

Yanlış mı yapıyorum yoksa JavaScript'in rasgele işlevi mi çalışıyor?

<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, height-bucketList [i], i + 1, yükseklik);' ctx.fillRect olmalıdır (i, height-bucketList [i], 1, height); ' – xiaoyi

+1

+1 Bu soruyu mükemmel bir şekilde sorduğum için. Açıkça ifade edildi, kod tamamlandı, takip edilmesi kolay ve temiz ve görüntü tam olarak ne olduğunu gösteriyor. Sorunun kendisi ilginç ve alakalı. Teşekkür ederim! –

+0

@AdamLiss o yanlış numaraları çizdi ... – xiaoyi

cevap

3

soru üzerine benim yorum komşuları arasında kaybolmuş gibi büyük bir şansı var çünkü beni bir yanıtla karşılık edelim: Aşağıda bu resim oluşturmak için kullanılan koddur.

Yani, yerinde @xiaoyi tarafından önerilen düzeltme ile, resim bana oldukça rasgele görünüyor: http://jsfiddle.net/TvNJw. Orijinal olarak soruda önerilen çizim rutini, i büyürken boyanan kepçe genişliğini artırırken, tüm kepçeler 1 genişliğine sahip olmalıdır. Bu, kovaları farklı renklerle çizerek kolayca tasvir edilebilir.