2016-04-07 16 views
0

確率が異なるランダムな画像を生成することについて質問があります。私はgoogled、私は1つの匹敵する質問(Is it possible to add weight to images in a generator?)が見つかりましたが、このコードは私のために動作しません。確率がHTML/Javascriptのランダム画像

私は今、無料のウェブサイトで練習しているので、私はPHPを使うことができません。私はHTMLだけを使うことができます。誰かが私に言った、もし私がhtmlを使うことができるなら、私はJavascriptを使うこともできる。

誰でも手伝ってもらえますか?私は今このコードを試していますが、動作しません:

<script language="JavaScript"> 

function random_imglink(){ 
var myimages=new Array(); 
myimages[1]="http://eredivisie-images.s3.amazonaws.com/Badges/215.png" 
myimages[2]="http://eredivisie-images.s3.amazonaws.com/Badges/204.png" 
myimages[3]="http://eredivisie-images.s3.amazonaws.com/Badges/198.png" 
myimages[4]="http://eredivisie-images.s3.amazonaws.com/Badges/313.png" 

var probabilities=new Array(); 
probabilities[1]=0.4; 
probabilities[2]=0.3; 
probabilities[3]=0.2; 
probabilities[4]=0.1; 

function getImage() { 
    var rand = Math.random(); 
    var probabilitiy_sum = 0; 
    for(var i=0; i < probabilities.length; i++) { 
     probabilitiy_sum += probabilities[i]; 
     if(rand <= probabilitiy_sum) { 
      return myimages[i]; 
     } 
    } 
    return myimages[myimages.length]; 
} 

</script> 
</a></p> 

ありがとう!

答えて

0

はい、これにはJavaScriptを使用できます。あなたのコードにはいくつかの問題があります。

最も重要なのは確率配列は値の昇順にソートし、JavaScript配列インデックスはゼロではなく1から始まる

ここに修正された作業コードがあります。

var images = [ 
    { probability: .4, url: "http://eredivisie-images.s3.amazonaws.com/Badges/215.png"}, 
    { probability: .3, url: "http://eredivisie-images.s3.amazonaws.com/Badges/204.png"}, 
    { probability: .2, url: "http://eredivisie-images.s3.amazonaws.com/Badges/198.png"}, 
    { probability: .1, url: "http://eredivisie-images.s3.amazonaws.com/Badges/313.png"} 
]; 

// it has to be in increasing order of probabilities 
images.sort(function (a, b) { 
    return a.probability - b.probability; 
}); 

function getImageUrl(images) { 
    var rand = Math.random(); 
    var sum = 0; 
    for(var i=0; i < images.length; i++) { 
     sum += images[i].probability; 
     if(rand <= sum) { 
      return images[i]; 
     } 
    } 
} 

以下は、同じアルゴリズムのテストコードです。方法100回の実行のために

(function() { 
    function getImageUrl(images) { 
     var rand = Math.random(); 
     var sum = 0; 
     for(var i=0; i < images.length; i++) { 
      sum += images[i].probability; 
      if(rand <= sum) { 
       return i; //modified to return index 
      } 
     } 
    } 
    var occurrences = [0, 0, 0, 0]; 
    for(var i = 0; i < 100; i++) { 
     occurrences[getImageUrl(images)]++; 
    } 
    console.log(occurrences); 
})(); 

試験結果、

//count of times images occur, indices are in increasing order of probabilities 
[8, 23, 36, 33] 
[8, 18, 37, 37] 
[12, 25, 29, 34]