javascript - 使用 HTML5 Canvas 以编程方式绘制此图案

标签 javascript html canvas html5-canvas drawing

如何使用 HTML5 Canvas 以编程方式绘制下面的图案?

我有画圆圈的逻辑 here 。另外,我可以绘制弧线,请参阅此 bin然而,我正在努力解决将所有这些组合成下面的模式所需的数学问题。

它是 7 条弧,每条弧包含不同数量的圆(从外到内:33、29、26、23、21、18、15)

我不太熟悉 Canvas,但认为它可以解决我的问题。

Desired Pattern

最佳答案

你可以这样做:

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var radius = 200;//outer radius
var rows = 7;//number of rows
var diff = 20;//distance between each row
var circle_count = [33, 29, 26, 23, 21, 18, 15];
for (var j = 0; j < rows; j++) {
  //the circle count to be made
  var count = circle_count.shift();

  var current_radius = radius - j*diff;
  for (var i = 0; i < count; i++) {
    //devide 180 degrees by the number of circle to draw 
    var angle = Math.PI / (count-1) * i*-1;
    //x coordinate
        var x = current_radius * Math.cos(angle) + 300;
    //y coordinate
    var y = current_radius * Math.sin(angle) + 100;
    ctx.beginPath();
    ctx.arc(x, y, 5, 0, 2 * Math.PI);
    ctx.stroke();
  }
}

工作 fiddle here

希望这有帮助!

关于javascript - 使用 HTML5 Canvas 以编程方式绘制此图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34941905/

相关文章:

javascript - `let` 和 for 循环 block 作用域的说明

使用 Object.create 与使用 new 的 JavaScript 继承

html - 在液体宽度的容器中包裹 float 文本

javascript - Canvas 正弦波方向

javascript - 使用 JS 获取当前应用的样式

javascript - Html anchor 链接和hashbang,简单的解决方案吗?

javascript - 如何使用 JavaScript 设置高度?

html - 保存 html Canvas 图像

javascript - 经常使用 localStorage 会降低我的网站速度吗?

javascript - Fabric js如何防止对象缩放到 Canvas 边界之外?