javascript - 将点均匀分布在圆上

标签 javascript geometry trigonometry

我需要将点均匀分布在圆的圆周上,但我已经失去了理智。结果并不完全是圆形的,而是螺旋形的,尤其是在点数较多的情况下。我已经进行了大力研究,但仍然无法找出哪里可能出错。

  window.onload = function() {
      var num = 15;

      var angle = (2 * Math.PI)/(num+1); var count = 0;
      var demo = document.getElementById("demo"); 

      function Dot() {
          this.angle = angle * count;
          count++;
          this.x = Math.cos(this.angle) * 200; 
          this.y = Math.sin(this.angle) * 200;
      }

      Dot.prototype.create = function() {
          var dot = document.createElement("div");
          dot.style.top = this.y + 100 + "px";
          dot.style.left = this.x + 200 + "px";
          dot.className = "dot";
          demo.appendChild(dot);
      }

      for (var i = 0; i < num; i++) {
          var d = new Dot();
          d.create(); 
      }
  }
  .dot {
      height: 20px;
      width: 20px;
      border-radius: 50%;
      background: blue;
      position: relative;
      text-align: center;
  }
    <!DOCTYPE html>
    <html>
    <head>
      <title>Metcalfe's Law Demo</title>
      <link rel="stylesheet" href="style.css">
      <script type="text/javascript" src="code.js"></script>
    </head>
        <body>
            <div id="container">
                <div id="demo">
                </div>
            </div>
        </body>
    </html>

最佳答案

主要错误非常简单 - 只需将样式 position:relative 更改为 position:absolute:

window.onload = function() {
      var num = 12;

      var angle = (2 * Math.PI)/(num); var count = 0;
      var demo = document.getElementById("demo"); 
      console.log(angle)

      function Dot() {
          this.angle = angle * count;
          count++;
          console.log(this.angle,count)
          this.x = Math.cos(this.angle) * 200; 
          this.y = Math.sin(this.angle) * 200;
      }

      Dot.prototype.create = function() {
          var dot = document.createElement("div");
          dot.style.top = this.y + 200 + "px";
          dot.style.left = this.x + 200 + "px";
          dot.className = "dot";
          demo.appendChild(dot);
      }

      for (var i = 0; i < num; i++) {
          var d = new Dot();
          d.create(); 
      }
  }
.dot {
      height: 20px;
      width: 20px;
      border-radius: 50%;
      background: blue;
      position: absolute;
      text-align: center;
  }
<!DOCTYPE html>
    <html>
    <head>
      <title>Metcalfe's Law Demo</title>
      <link rel="stylesheet" href="style.css">
      <script type="text/javascript" src="code.js"></script>
    </head>
        <body>
            <div id="container">
                <div id="demo">
                </div>
            </div>
        </body>
    </html>

关于javascript - 将点均匀分布在圆上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358067/

相关文章:

javascript - 在 Angular 中的 Controller 之间绑定(bind)数据

javascript - JavaScript 递归函数问题

javascript - Angularjs 没有正确绑定(bind)到空数组

javascript - 如何获取开始标签内的文本并在jquery中进行更改?

ios - 从屏幕中心展开一个圆圈

geometry - 计算N维空间3个点距离最小的等距点

找到包围一个点的线的算法

javascript - 计算轨道物体的位置

javascript - 如何找到距给定坐标最近的点

c++ - 如何解决在 C++ 中 sin(M_PI) 不为 0 的事实?