Sto utilizzando la funzione JavaScript Math.random()
per distribuire gli articoli oltre i bucket. Successivamente, visualizzo i secchi in una tela. Mi aspetto che gli elementi siano distribuiti in modo uniforme, ma (anche dopo ripetuti tentativi in più browser), sembra che la distribuzione sia molto più fine sulla sinistra (vicino a zero) e diventi più uniforme verso destra (più vicino a 1). Vedere l'immagine .Comportamento casuale strano JavaScript
Sto sbagliando oppure la funzione casuale di JavaScript non funziona? Di seguito è riportato il codice che è stato utilizzato per generare questa immagine:
<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>
'ctx.fillRect (i, altezza-bucketList [i], i + 1, altezza);' dovrebbe essere 'ctx.fillRect (i, height-bucketList [i], 1, height);' – xiaoyi
+1 per aver fatto questa domanda perfettamente. È chiaramente formulato, il codice è completo, facile da seguire e pulito, e l'immagine mostra esattamente cosa sta succedendo. La domanda in sé è interessante e pertinente. Grazie! –
@AdamLiss ha tracciato i numeri in modo errato ... – xiaoyi