iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript如何实现伪随机正态分布
  • 783
分享到

JavaScript如何实现伪随机正态分布

2024-04-02 19:04:59 783人浏览 薄情痞子
摘要

这篇文章主要介绍了javascript如何实现伪随机正态分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在游戏开发中经常遇到随机奖励的情况

这篇文章主要介绍了javascript如何实现伪随机正态分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

游戏开发中经常遇到随机奖励的情况,一般会采取先生成数组,再一个一个取的方式发随机奖励。

下面是js测试正态分布代码:

<!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);
    }
  }
  //画圆点
  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>

感谢你能够认真阅读完这篇文章,希望小编分享的“JavaScript如何实现伪随机正态分布”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网VUE频道,更多相关知识等着你来学习!

--结束END--

本文标题: JavaScript如何实现伪随机正态分布

本文链接: https://www.lsjlt.com/news/76307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript如何实现伪随机正态分布
    这篇文章主要介绍了JavaScript如何实现伪随机正态分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在游戏开发中经常遇到随机奖励的情况...
    99+
    2024-04-02
  • PyTorch之torch.randn()如何创建正态分布随机数
    目录torch.randn()如何创建正态分布随机数torch之随机数生成方式1. 均匀分布2. 标准正态分布3.离散正态分布4.线性间距向量总结torch.randn()如何创建正...
    99+
    2023-02-02
    PyTorch torch.randn() torch.randn创建正态分布随机数 torch.randn正态分布随机数
  • Python如何实现随机采样及概率分布
    这篇文章主要介绍了Python如何实现随机采样及概率分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 二项(binomial)/伯努利(Bernoulli)分布1.1 ...
    99+
    2023-06-22
  • Python中如何实现随机采样和概率分布
    这篇文章主要介绍了Python中如何实现随机采样和概率分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Python(包括其包Numpy)中包含了了许多概率算法,...
    99+
    2023-06-21
  • PostgreSQL 16 新特性之正态分布随机数函数的示例
    random() 函数可以用于生成一个大于等于 0 小于等于 1 的随机数,生成的数据遵循平均分布。不过在实际环境中,更多的数据则是遵循正态分布。PostgreSQL 提供了一个扩展模块 tablefunc,可以用于生成...
    99+
    2023-01-31
    PostgreSQL随机数函数 PostgreSQL随机数 PostgreSQL正态分布随机数
  • PostgreSQL 16 新特性之正态分布随机数函数的示例
    random() 函数可以用于生成一个大于等于 0 小于等于 1 的随机数,生成的数据遵循平均分布。不过在实际环境中,更多的数据则是遵循正态分布。PostgreSQL 提供了一个扩展...
    99+
    2023-01-31
    PostgreSQL随机数函数 PostgreSQL随机数 PostgreSQL正态分布随机数
  • 如何在python中使用scipy.stats模块实现正态分布
    这篇文章给大家介绍如何在python中使用scipy.stats模块实现正态分布,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的scipy.stats模块是连续型随机变量的公共方法,可以产生随机数,通常是以...
    99+
    2023-06-06
  • javascript如何实现四位随机验证码
    这篇文章主要为大家展示了“javascript如何实现四位随机验证码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript如何实现四位随机验证码”这...
    99+
    2024-04-02
  • Python实现从概率分布中随机采样
    目录1. 二项(binomial)/伯努利(Bernoulli)分布2. 多项(multinomial)分布3.均匀(uniform)分布4. 狄利克雷(Dirichlet)分布参考...
    99+
    2024-04-02
  • php如何实现网页伪静态
    小编给大家分享一下php如何实现网页伪静态,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php实现网页伪静态的方法:首先在服务器根目录创建一个“.htaccess”文件;然后添加内容为“RewriteRule ^index...
    99+
    2023-06-14
  • CentOS6.5如何实现Hadoop_2.8.1编译及HDFS伪分布式部署
    这篇文章主要介绍了CentOS6.5如何实现Hadoop_2.8.1编译及HDFS伪分布式部署,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。CentOS6.5实现Hadoop...
    99+
    2023-06-03
  • JavaScript如何实现鼠标追随
    小编给大家分享一下JavaScript如何实现鼠标追随,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • JavaScript如何实现随机码的生成与校验
    这篇文章给大家分享的是有关JavaScript如何实现随机码的生成与校验的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,j...
    99+
    2023-06-14
  • 怎么在R语言中实现一个t分布正态分布分位数图
    怎么在R语言中实现一个t分布正态分布分位数图?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如何用RStudio做分位数图呢?#分位数图,画t分布密度带p值x=s...
    99+
    2023-06-14
  • JavaScript如何实现瀑布流布局
    这篇文章将为大家详细讲解有关JavaScript如何实现瀑布流布局,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。就是一堆等宽不等高的数据块组成的页面,如图: 现在好多网站...
    99+
    2024-04-02
  • Numpy随机抽样如何实现
    这篇文章主要介绍了Numpy随机抽样如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Numpy随机抽样如何实现文章都会有所收获,下面我们一起来看看吧。前言numpy.random 模块对 Python 内...
    99+
    2023-07-05
  • Python如何实现随机游走
    这篇文章主要介绍了Python如何实现随机游走,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、单一的500步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现。注...
    99+
    2023-06-14
  • Python如何实现随机漫步
    本文小编为大家详细介绍“Python如何实现随机漫步”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现随机漫步”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.  创建 RandomW...
    99+
    2023-07-05
  • C++中如何使用normal_distribution高斯正态分布函数
    这篇文章将为大家详细讲解有关C++中如何使用normal_distribution高斯正态分布函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。图 1 显示的是正态(或高斯)分布。它是一条连...
    99+
    2023-06-20
  • MySQL中如何实现随机恢复
    这篇文章给大家介绍MySQL中如何实现随机恢复,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1)数据库参数配置不规范,/etc/my.cnf和/data/mysql_xxx/my.cn...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作