首页 > 其他分享 >投针实验计算Π值的可视化

投针实验计算Π值的可视化

时间:2023-07-28 09:47:20浏览次数:36  
标签:myCanvas const arr 实验 投针 context 可视化 let Math

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>needleProblem</title>
</head>
<body>

  <canvas id="myCanvas"></canvas>
  <br>
  <input id="times" type="text">
  <button id="submit">提交</button>
  
  <script type="text/javascript">
  
    // 初始化
    const myCanvas = document.getElementById("myCanvas");
    myCanvas.width = 500;   // 只能在这里设置,CSS中的设置没有作用
    myCanvas.height = 500;
    const context = myCanvas.getContext("2d");
    const a = 10;
    
    let arr = [];
    // 绘制线
    for (let i = 0; i < myCanvas.height; i += a) {
      context.beginPath();
      context.moveTo(0,i);
      context.lineTo(myCanvas.width,i);
      context.closePath();
      context.stroke();
      arr.push(i);
    }
    
    // 绘制针
    const submit = document.getElementById("submit");
    submit.addEventListener("click", function() {
      const times = document.getElementById("times").value;
      const len = a / 2.0;
      let timesPoint = 0;
      for (let i = 0; i < times; i++) {
        let x1 = Math.random() * myCanvas.width;
        let y1 = Math.random() * myCanvas.height;
        let angle = Math.random() * 2 * Math.PI - Math.PI;
        let x2 = x1 + len * Math.cos(angle);
        let y2 = y1 + len * Math.sin(angle);
        context.beginPath();
        context.moveTo(x1, y1);
        context.lineTo(x2, y2);
        context.closePath();
        context.strokeStyle="red";
        context.stroke();
    
        // 检测针与线的交点
        let length = arr.length;
        for (let j = 0; j < length; j++) {
          if ((y1 - arr[j]) * (y2 - arr[j]) <= 0) {
            timesPoint++;
          }
        }
      }
      alert(times/timesPoint);
    });
  </script>
</body>
</html>
 

标签:myCanvas,const,arr,实验,投针,context,可视化,let,Math
From: https://www.cnblogs.com/H2O-C2H5OH/p/17586751.html

相关文章

  • linux可视化管理 | webmin
    摘要介绍linux可视化管理介绍webmin如何使用一、基本介绍Webmin是功能强大的基于Web的Unix/linux系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理操作。除了各版本的linux以外还可用于:AIX、HPUX、Solaris、Unixware、lrix和FreeBSD等系统(这几......
  • linux可视化管理 | bt宝塔
    摘要介绍linux的bt宝塔可视化管理一、基本介绍bt宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务器管理功能。二、使用步骤1.下载安装安装yuminstall-ywget&&wget-Oinstall.shhttp://download.bt.cn/i......
  • Telnet小实验
    Telnet小实验实验环境两台windowsXP虚拟机 操作命令netstarttelnet//开启telnet服务,也可以再service.msg里面手动打开,也可以在c盘里的system32文件夹里面打开telnet.exe|||||||但win10好像自带就有netstat  //看服务是否打开用这两行命令打开两台虚拟机的telnet服......
  • # 实验13
    实验13第一问:问题:编写程序并安装int7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。以上中断例程安装完成后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后CS、IP和栈中的状态。......
  • AIRIOT可视化组态引擎如何应用于物联业务场景中
    在物联网的业务应用场景中,可视化组态是一个必不可少的功能需求。不同的行业场景,都需要将物联设备采集的数据和业务场景状态进行直观的可视化展示,供使用者进行分析或决策。如工艺流程用能监测、3D场景构建、能耗趋势场景报警联动、重点设备视频接入、重点数据移动监测、计划用能终......
  • 数维图智慧景区三维可视化管理系统平台
    随着人民生活水平的提高和旅游产品的丰富多样,我国人民对于旅游的需求逐渐从“走过场”转变为“品质体验”。建设背景随着互联网、大数据、人工智能等新技术在旅游领域的应用,以数字化、网络化、智能化为特征的智慧旅游成为旅游业高质量发展新动能。2014年8月,《关于促进旅游业改......
  • NGS实验室质控-DNA污染控制方法篇(引用)
    NGS实验室质控-DNA污染控制方法篇 本篇主要和大家分享有关NGS检测体细胞突变时判断DNA污染的方法。  一、FDA产品-MSK-IMPACT的DNA污染控制方法 1)判断样本交叉污染(samplemix-up) 计算参考样本和待查样本间的“不一致比例”,即在参考样本中纯合基因......
  • Python数据可视化-折线图
    Python数据可视化-折线图一、JSON数据格式1.1什么是jsonJSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符串主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互1.2json......
  • 【小实验】javascript 能够表述的最大整数
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯打开浏览器的控制台,开始输入数值:输入:(16位十进制值)9999999999999998返回同样结果输入:9999999999999999返回:10000000000000000数值不一样,说明精度已经开始丢......
  • # 实验十二
    实验十二编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串"divideerror!"中断处理程序assumecs:codecodesegmentstart:movax,csmovds,axmovsi,offsetdo0;设置源地址movax,0moves,axmovdi,200h;设置目的地址movcx,offsetdo0end-offsetdo......