這篇文章主要介紹了JavaScript如何實(shí)現(xiàn)偽隨機(jī)正態(tài)分布,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站、網(wǎng)站重做改版、鎮(zhèn)賚網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為鎮(zhèn)賚等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
在游戲開(kāi)發(fā)中經(jīng)常遇到隨機(jī)獎(jiǎng)勵(lì)的情況,一般會(huì)采取先生成數(shù)組,再一個(gè)一個(gè)取的方式發(fā)隨機(jī)獎(jiǎng)勵(lì)。
下面是js測(cè)試正態(tài)分布代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<canvas id="myCanvas" width="800" height="400" >
Your browser does not support the canvas element.
</canvas>
<canvas id="myCanvas2" width="800" height="400" >
Your browser does not support the canvas element.
</canvas>
<textarea id="text" cols="200" rows="5000"></textarea>
<script type="text/javascript">
var timesArr = [];
var timesArrObj = {};
window.onload = function () {
// for (var meter = 0; meter < 800; meter++) {
// var times = getNumberInNormalDistribution(20, 7);
// addPoint(times, meter);
// timesArr.push(Math.floor(times));
// }
// drawGreenTab(timesArr,1);
// drawLine(0, 380, 800, 380);
drawResult(1);
drawResult(2);
drawResult(0);
drawGreenTab(timesArrObj[1], 1);
drawGreenTab(timesArrObj[2], 2);
drawGreenTab(timesArrObj[0], 0);
}
//制作綠色柱狀圖表
function drawGreenTab(timesArr, color) {
var timesTypes = {};
for (var i in timesArr) {
var times = timesArr[i];
if (timesTypes[times] == null) {
timesTypes[times] = 0;
} else {
timesTypes[times] = timesTypes[times] + 1;
}
}
for (var i in timesTypes) {
drawRect(i, timesTypes[i], 4, color);
}
}
//畫(huà)圓點(diǎn)
function addPoint(y, x, color) {
y = 400 - y;
var c = document.getElementById("myCanvas");
var cxt = c.getContext("2d");
if (color == null) {
cxt.fillStyle = "#FF0000";
} else {
cxt.fillStyle = color;
}
cxt.beginPath();
cxt.arc(x, y, 2, 0, Math.PI * 2, true);
cxt.closePath();
cxt.fill();
}
var meter = 0;
//劃線
function drawLine(beginx, beginy, endx, endy) {
var c = document.getElementById("myCanvas");
var cxt = c.getContext("2d");
cxt.moveTo(beginx, beginy);
cxt.lineTo(endx, endy);
cxt.stroke();
}
//模擬正態(tài)分布取值
function getNumberInNormalDistribution(mean, std_dev) {
return mean + (uniform2NormalDistribution() * std_dev);
}
//模擬正態(tài)分布偏差
function uniform2NormalDistribution() {
var sum = 0.0;
for (var i = 0; i < 12; i++) {
sum = sum + Math.random();
}
return sum - 6;
}
//畫(huà)一個(gè)長(zhǎng)方形
function drawRect(x, y, width, index) {
var color = "#FF0000";
if (index == 1) {
color = "#00FF00";
} else if (index == 2) {
color = "#0000FF";
}
var c = document.getElementById("myCanvas2");
var cxt = c.getContext("2d");
cxt.fillStyle = color;
cxt.fillRect(x * width + index * 200, 400 - y, width - 2, y);
}
//畫(huà)出生成的圖像
function drawResult(index) {
var color = "#FF0000";
if (index % 3 == 1) {
color = "#00FF00";
} else if (index % 3 == 2) {
color = "#0000FF";
}
var result = generateList();
var resultStr = "";
// for (var i in result) {
// resultStr = resultStr + result[i] + "\n";
// }
//document.getElementById("text").value = resultStr;
var resulttimes = {};
for (var i in result) {
if (resulttimes[result[i]] == null) {
resulttimes[result[i]] = 1;
} else {
resulttimes[result[i]] = resulttimes[result[i]] + 1;
}
}
for (var i in resulttimes) {
resultStr = resultStr + resulttimes[i] + "\n";
}
document.getElementById("text").value = resultStr;
var timeslist = [];
var times = 1;
for (var i in result) {
if (result[i] == index) {
addPoint(times, i / 5, color);
if (timesArrObj[index] == null) {
timesArrObj[index] = [];
}
timesArrObj[index].push(times);
times = 0;
} else {
times++;
}
}
}
//權(quán)重?cái)?shù)組
var wt = [105, 216, 316, 488, 1000, 2000, 3680, 5890];//,14770,71535
//生成結(jié)果數(shù)組函數(shù),結(jié)果為權(quán)重?cái)?shù)組的索引,從0開(kāi)始
function generateList() {
//生成的結(jié)果數(shù)組長(zhǎng)度
var n = 50000;
var wtp = [];
var sum = 0;
for (var i in wt) {
sum = sum + wt[i];
}
for (var i in wt) {
wtp.push(wt[i] / sum);
}
var result = [];
var p = [];
for (var i in wtp) {
var inp = getNumberInNormalDistribution(1 / wtp[i], 1 / wtp[i] / 3);
p.push(inp);
}
for (var i = 0; i < n; i++) {
var minp = 99999999;
var minj = -1;
for (var j in p) {
if (p[j] < minp) {
minp = p[j];
minj = j;
}
}
result.push(minj);
for (var j in p) {
p[j] = p[j] - minp;
}
p[minj] = getNumberInNormalDistribution(1 / wtp[minj], 1 / wtp[minj] / 3);
}
return result;
}
</script>
</body>
</html>感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“JavaScript如何實(shí)現(xiàn)偽隨機(jī)正態(tài)分布”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
當(dāng)前標(biāo)題:JavaScript如何實(shí)現(xiàn)偽隨機(jī)正態(tài)分布
分享地址:http://www.yijiale78.com/article18/gcesdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站改版、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)