Monte Carlo Pi Animation The Next CEO of Stack Overflow

From jafe to El-Guest

Help/tips for a first time writer?

Does higher Oxidation/ reduction potential translate to higher energy storage in battery?

Inexact numbers as keys in Association?

Would a grinding machine be a simple and workable propulsion system for an interplanetary spacecraft?

Redefining symbol midway through a document

What was Carter Burke's job for "the company" in Aliens?

How to use ReplaceAll on an expression that contains a rule

How to avoid supervisors with prejudiced views?

Is French Guiana a (hard) EU border?

What flight has the highest ratio of timezone difference to flight time?

Small nick on power cord from an electric alarm clock, and copper wiring exposed but intact

What CSS properties can the br tag have?

Why don't programming languages automatically manage the synchronous/asynchronous problem?

What is the process for cleansing a very negative action

My ex-girlfriend uses my Apple ID to login to her iPad, do I have to give her my Apple ID password to reset it?

Spaces in which all closed sets are regular closed

Is dried pee considered dirt?

Expressing the idea of having a very busy time

Film where the government was corrupt with aliens, people sent to kill aliens are given rigged visors not showing the right aliens

Is there a reasonable and studied concept of reduction between regular languages?

Is it ok to trim down a tube patch?

Which one is the true statement?

Won the lottery - how do I keep the money?



Monte Carlo Pi Animation



The Next CEO of Stack Overflow










0












$begingroup$


I have created a program that calculates pi using a Monte Carlo method. It also animates the process and displays the value as it is updated to show how it gets closer and closer to the actual value as more time passes. It is made with HTML canvas. I would like some feedback on my program.






"use strict";


function hypot(a, b)
return Math.sqrt(a * a + b * b);


function randInt(min, max)
return Math.floor(Math.random() * (max - min)) + min


class Circle
constructor(x, y, r)
this.x = x;
this.y = y;
this.r = r;


draw()
ctx.strokeStyle = "#000";
ctx.lineWidth = "5px";
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
ctx.stroke();


collidePoint(pt)
var dx = this.x - pt.x;
var dy = this.y - pt.y;
return hypot(dx, dy) <= this.r;



class Point
constructor(x, y)
this.x = x;
this.y = y;


draw()
ctx.fillStyle = "rgba(0, 0, 0, 16)";
ctx.fillRect(this.x, this.y, 1, 1);




const canvas = document.getElementById("disp");
const ctx = canvas.getContext("2d");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var width = parseInt(canvas.width);
var height = parseInt(canvas.height);
var trys = 0;
var lands = 0;
var area = width * height;
var points = [];
var ball = new Circle(width / 2, height / 2, Math.min(width, height) / 2);
setInterval(step, 10);

function drawAll()
ctx.clearRect(0, 0, width, height);
ball.draw();
points.forEach((point) =>
point.draw();
);


function step()
drawAll();
var pnt = new Point(randInt(0, width), randInt(0, height));
trys++;
if (ball.collidePoint(pnt))
lands++;

var prob = lands / trys;
var pi = (prob * area) / Math.pow(ball.r, 2);
document.getElementById("out").innerText = pi.toString();
points.push(pnt);

html, body 
height: 100%;
overflow: hidden;


#disp
width: 100vw;
height: 100vh;
margin: 0;


#box
position: absolute;
z-index: 1;
width: 200px;
height: 20px;
left: 5%;
top: 5%;
background-color: whitesmoke;

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Monte Carlo Pi</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<canvas id="disp"></canvas>
<span id="box">Pi ≈ <span id="out"></span></span>
<script src="script.js"></script>
</body>
</html>











share









$endgroup$
















    0












    $begingroup$


    I have created a program that calculates pi using a Monte Carlo method. It also animates the process and displays the value as it is updated to show how it gets closer and closer to the actual value as more time passes. It is made with HTML canvas. I would like some feedback on my program.






    "use strict";


    function hypot(a, b)
    return Math.sqrt(a * a + b * b);


    function randInt(min, max)
    return Math.floor(Math.random() * (max - min)) + min


    class Circle
    constructor(x, y, r)
    this.x = x;
    this.y = y;
    this.r = r;


    draw()
    ctx.strokeStyle = "#000";
    ctx.lineWidth = "5px";
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
    ctx.stroke();


    collidePoint(pt)
    var dx = this.x - pt.x;
    var dy = this.y - pt.y;
    return hypot(dx, dy) <= this.r;



    class Point
    constructor(x, y)
    this.x = x;
    this.y = y;


    draw()
    ctx.fillStyle = "rgba(0, 0, 0, 16)";
    ctx.fillRect(this.x, this.y, 1, 1);




    const canvas = document.getElementById("disp");
    const ctx = canvas.getContext("2d");
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    var width = parseInt(canvas.width);
    var height = parseInt(canvas.height);
    var trys = 0;
    var lands = 0;
    var area = width * height;
    var points = [];
    var ball = new Circle(width / 2, height / 2, Math.min(width, height) / 2);
    setInterval(step, 10);

    function drawAll()
    ctx.clearRect(0, 0, width, height);
    ball.draw();
    points.forEach((point) =>
    point.draw();
    );


    function step()
    drawAll();
    var pnt = new Point(randInt(0, width), randInt(0, height));
    trys++;
    if (ball.collidePoint(pnt))
    lands++;

    var prob = lands / trys;
    var pi = (prob * area) / Math.pow(ball.r, 2);
    document.getElementById("out").innerText = pi.toString();
    points.push(pnt);

    html, body 
    height: 100%;
    overflow: hidden;


    #disp
    width: 100vw;
    height: 100vh;
    margin: 0;


    #box
    position: absolute;
    z-index: 1;
    width: 200px;
    height: 20px;
    left: 5%;
    top: 5%;
    background-color: whitesmoke;

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Monte Carlo Pi</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <canvas id="disp"></canvas>
    <span id="box">Pi ≈ <span id="out"></span></span>
    <script src="script.js"></script>
    </body>
    </html>











    share









    $endgroup$














      0












      0








      0





      $begingroup$


      I have created a program that calculates pi using a Monte Carlo method. It also animates the process and displays the value as it is updated to show how it gets closer and closer to the actual value as more time passes. It is made with HTML canvas. I would like some feedback on my program.






      "use strict";


      function hypot(a, b)
      return Math.sqrt(a * a + b * b);


      function randInt(min, max)
      return Math.floor(Math.random() * (max - min)) + min


      class Circle
      constructor(x, y, r)
      this.x = x;
      this.y = y;
      this.r = r;


      draw()
      ctx.strokeStyle = "#000";
      ctx.lineWidth = "5px";
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
      ctx.stroke();


      collidePoint(pt)
      var dx = this.x - pt.x;
      var dy = this.y - pt.y;
      return hypot(dx, dy) <= this.r;



      class Point
      constructor(x, y)
      this.x = x;
      this.y = y;


      draw()
      ctx.fillStyle = "rgba(0, 0, 0, 16)";
      ctx.fillRect(this.x, this.y, 1, 1);




      const canvas = document.getElementById("disp");
      const ctx = canvas.getContext("2d");
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      var width = parseInt(canvas.width);
      var height = parseInt(canvas.height);
      var trys = 0;
      var lands = 0;
      var area = width * height;
      var points = [];
      var ball = new Circle(width / 2, height / 2, Math.min(width, height) / 2);
      setInterval(step, 10);

      function drawAll()
      ctx.clearRect(0, 0, width, height);
      ball.draw();
      points.forEach((point) =>
      point.draw();
      );


      function step()
      drawAll();
      var pnt = new Point(randInt(0, width), randInt(0, height));
      trys++;
      if (ball.collidePoint(pnt))
      lands++;

      var prob = lands / trys;
      var pi = (prob * area) / Math.pow(ball.r, 2);
      document.getElementById("out").innerText = pi.toString();
      points.push(pnt);

      html, body 
      height: 100%;
      overflow: hidden;


      #disp
      width: 100vw;
      height: 100vh;
      margin: 0;


      #box
      position: absolute;
      z-index: 1;
      width: 200px;
      height: 20px;
      left: 5%;
      top: 5%;
      background-color: whitesmoke;

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>Monte Carlo Pi</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
      </head>
      <body>
      <canvas id="disp"></canvas>
      <span id="box">Pi ≈ <span id="out"></span></span>
      <script src="script.js"></script>
      </body>
      </html>











      share









      $endgroup$




      I have created a program that calculates pi using a Monte Carlo method. It also animates the process and displays the value as it is updated to show how it gets closer and closer to the actual value as more time passes. It is made with HTML canvas. I would like some feedback on my program.






      "use strict";


      function hypot(a, b)
      return Math.sqrt(a * a + b * b);


      function randInt(min, max)
      return Math.floor(Math.random() * (max - min)) + min


      class Circle
      constructor(x, y, r)
      this.x = x;
      this.y = y;
      this.r = r;


      draw()
      ctx.strokeStyle = "#000";
      ctx.lineWidth = "5px";
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
      ctx.stroke();


      collidePoint(pt)
      var dx = this.x - pt.x;
      var dy = this.y - pt.y;
      return hypot(dx, dy) <= this.r;



      class Point
      constructor(x, y)
      this.x = x;
      this.y = y;


      draw()
      ctx.fillStyle = "rgba(0, 0, 0, 16)";
      ctx.fillRect(this.x, this.y, 1, 1);




      const canvas = document.getElementById("disp");
      const ctx = canvas.getContext("2d");
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      var width = parseInt(canvas.width);
      var height = parseInt(canvas.height);
      var trys = 0;
      var lands = 0;
      var area = width * height;
      var points = [];
      var ball = new Circle(width / 2, height / 2, Math.min(width, height) / 2);
      setInterval(step, 10);

      function drawAll()
      ctx.clearRect(0, 0, width, height);
      ball.draw();
      points.forEach((point) =>
      point.draw();
      );


      function step()
      drawAll();
      var pnt = new Point(randInt(0, width), randInt(0, height));
      trys++;
      if (ball.collidePoint(pnt))
      lands++;

      var prob = lands / trys;
      var pi = (prob * area) / Math.pow(ball.r, 2);
      document.getElementById("out").innerText = pi.toString();
      points.push(pnt);

      html, body 
      height: 100%;
      overflow: hidden;


      #disp
      width: 100vw;
      height: 100vh;
      margin: 0;


      #box
      position: absolute;
      z-index: 1;
      width: 200px;
      height: 20px;
      left: 5%;
      top: 5%;
      background-color: whitesmoke;

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>Monte Carlo Pi</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
      </head>
      <body>
      <canvas id="disp"></canvas>
      <span id="box">Pi ≈ <span id="out"></span></span>
      <script src="script.js"></script>
      </body>
      </html>








      "use strict";


      function hypot(a, b)
      return Math.sqrt(a * a + b * b);


      function randInt(min, max)
      return Math.floor(Math.random() * (max - min)) + min


      class Circle
      constructor(x, y, r)
      this.x = x;
      this.y = y;
      this.r = r;


      draw()
      ctx.strokeStyle = "#000";
      ctx.lineWidth = "5px";
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
      ctx.stroke();


      collidePoint(pt)
      var dx = this.x - pt.x;
      var dy = this.y - pt.y;
      return hypot(dx, dy) <= this.r;



      class Point
      constructor(x, y)
      this.x = x;
      this.y = y;


      draw()
      ctx.fillStyle = "rgba(0, 0, 0, 16)";
      ctx.fillRect(this.x, this.y, 1, 1);




      const canvas = document.getElementById("disp");
      const ctx = canvas.getContext("2d");
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      var width = parseInt(canvas.width);
      var height = parseInt(canvas.height);
      var trys = 0;
      var lands = 0;
      var area = width * height;
      var points = [];
      var ball = new Circle(width / 2, height / 2, Math.min(width, height) / 2);
      setInterval(step, 10);

      function drawAll()
      ctx.clearRect(0, 0, width, height);
      ball.draw();
      points.forEach((point) =>
      point.draw();
      );


      function step()
      drawAll();
      var pnt = new Point(randInt(0, width), randInt(0, height));
      trys++;
      if (ball.collidePoint(pnt))
      lands++;

      var prob = lands / trys;
      var pi = (prob * area) / Math.pow(ball.r, 2);
      document.getElementById("out").innerText = pi.toString();
      points.push(pnt);

      html, body 
      height: 100%;
      overflow: hidden;


      #disp
      width: 100vw;
      height: 100vh;
      margin: 0;


      #box
      position: absolute;
      z-index: 1;
      width: 200px;
      height: 20px;
      left: 5%;
      top: 5%;
      background-color: whitesmoke;

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>Monte Carlo Pi</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
      </head>
      <body>
      <canvas id="disp"></canvas>
      <span id="box">Pi ≈ <span id="out"></span></span>
      <script src="script.js"></script>
      </body>
      </html>





      "use strict";


      function hypot(a, b)
      return Math.sqrt(a * a + b * b);


      function randInt(min, max)
      return Math.floor(Math.random() * (max - min)) + min


      class Circle
      constructor(x, y, r)
      this.x = x;
      this.y = y;
      this.r = r;


      draw()
      ctx.strokeStyle = "#000";
      ctx.lineWidth = "5px";
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
      ctx.stroke();


      collidePoint(pt)
      var dx = this.x - pt.x;
      var dy = this.y - pt.y;
      return hypot(dx, dy) <= this.r;



      class Point
      constructor(x, y)
      this.x = x;
      this.y = y;


      draw()
      ctx.fillStyle = "rgba(0, 0, 0, 16)";
      ctx.fillRect(this.x, this.y, 1, 1);




      const canvas = document.getElementById("disp");
      const ctx = canvas.getContext("2d");
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      var width = parseInt(canvas.width);
      var height = parseInt(canvas.height);
      var trys = 0;
      var lands = 0;
      var area = width * height;
      var points = [];
      var ball = new Circle(width / 2, height / 2, Math.min(width, height) / 2);
      setInterval(step, 10);

      function drawAll()
      ctx.clearRect(0, 0, width, height);
      ball.draw();
      points.forEach((point) =>
      point.draw();
      );


      function step()
      drawAll();
      var pnt = new Point(randInt(0, width), randInt(0, height));
      trys++;
      if (ball.collidePoint(pnt))
      lands++;

      var prob = lands / trys;
      var pi = (prob * area) / Math.pow(ball.r, 2);
      document.getElementById("out").innerText = pi.toString();
      points.push(pnt);

      html, body 
      height: 100%;
      overflow: hidden;


      #disp
      width: 100vw;
      height: 100vh;
      margin: 0;


      #box
      position: absolute;
      z-index: 1;
      width: 200px;
      height: 20px;
      left: 5%;
      top: 5%;
      background-color: whitesmoke;

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>Monte Carlo Pi</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
      </head>
      <body>
      <canvas id="disp"></canvas>
      <span id="box">Pi ≈ <span id="out"></span></span>
      <script src="script.js"></script>
      </body>
      </html>






      javascript mathematics canvas





      share












      share










      share



      share










      asked 2 mins ago









      All KnowerAll Knower

      1677




      1677




















          0






          active

          oldest

          votes












          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216614%2fmonte-carlo-pi-animation%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216614%2fmonte-carlo-pi-animation%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          कुँवर स्रोत दिक्चालन सूची"कुँवर""राणा कुँवरके वंशावली"

          Why is a white electrical wire connected to 2 black wires?How to wire a light fixture with 3 white wires in box?How should I wire a ceiling fan when there's only three wires in the box?Two white, two black, two ground, and red wire in ceiling box connected to switchWhy is there a white wire connected to multiple black wires in my light box?How to wire a light with two white wires and one black wireReplace light switch connected to a power outlet with dimmer - two black wires to one black and redHow to wire a light with multiple black/white/green wires from the ceiling?Ceiling box has 2 black and white wires but fan/ light only has 1 of eachWhy neutral wire connected to load wire?Switch with 2 black, 2 white, 2 ground and 1 red wire connected to ceiling light and a receptacle?

          चैत्य भूमि चित्र दीर्घा सन्दर्भ बाहरी कडियाँ दिक्चालन सूची"Chaitya Bhoomi""Chaitya Bhoomi: Statue of Equality in India""Dadar Chaitya Bhoomi: Statue of Equality in India""Ambedkar memorial: Centre okays transfer of Indu Mill land"चैत्यभमि