这篇文章主要介绍了基于JavaScript伪随机正态分布代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在游戏开发中经常遇到随机奖励的情况,一般会采取先生成数组,再一个一个取的方式发随机奖励。
下面是js测试正态分布代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="myCanvas" width="800" height="400" style="border:1px solid #c3c3c3;"> Your browser does not support the canvas element. </canvas> <canvas id="myCanvas2" width="800" height="400" style="border:1px solid #c3c3c3;"> 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); } } //画圆点 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(); } //模拟正态分布取值 function getNumberInNormalDistribution(mean, std_dev) { return mean + (uniform2NormalDistribution() * std_dev); } //模拟正态分布偏差 function uniform2NormalDistribution() { var sum = 0.0; for (var i = 0; i < 12; i++) { sum = sum + Math.random(); } return sum - 6; } //画一个长方形 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); } //画出生成的图像 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++; } } } //权重数组 var wt = [105, 216, 316, 488, 1000, 2000, 3680, 5890];//,14770,71535 //生成结果数组函数,结果为权重数组的索引,从0开始 function generateList() { //生成的结果数组长度 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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月16日
2024年11月16日
- 第五街的士高《印度激情版》3CD [WAV+CUE][2.4G]
- 三国志8重制版哪个武将智力高 三国志8重制版智力武将排行一览
- 三国志8重制版哪个武将好 三国志8重制版武将排行一览
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]