javascript - 动态排列三 Angular 形中的元素?

标签 javascript jquery dynamic geometry

我正在寻找一个 JS 函数来动态排列三 Angular 形中的元素,如下图所示:

元素的数量将取决于用户的选择,因此每次都会不同。 我成功地完成了一个圆形,但对于一个三 Angular 形似乎相当棘手。

最佳答案

试试这个:

function drawTriangle(ctx, sideLength) {
  var i = 0, direction = 1;

  ctx.save();
  ctx.strokeStyle = 'rgba(0, 0, 0, 1)';

  ctx.beginPath();

  ctx.moveTo(0, 0);
  for (; i < 3; i += 1) {
    ctx.rotate(Math.PI / -3);
    ctx.lineTo(direction * sideLength, 0);
    ctx.translate(direction * sideLength, 0);
    direction *= -1;
  }

  ctx.closePath();
  ctx.stroke();

  ctx.restore();
}

function drawCircle(ctx) {
  ctx.save();
  ctx.fillStyle = 'rgba(255, 0, 0, 1)';

  ctx.beginPath();
  ctx.arc(0, 0, 3, 0, 2 * Math.PI, true); 
  ctx.closePath();
  ctx.fill();

  ctx.restore();
}

function drawCircles(ctx, num, sideLength) {
  var stepLength = (sideLength * 3) / num, i = 0;

  ctx.save();
  for (; i < num; i += 1) {
    if ((stepLength * i) % sideLength === 0) {
      ctx.rotate(2 * Math.PI / 3);
    }

    drawCircle(ctx);
    ctx.translate(-stepLength, 0);
  }

  ctx.restore();
}

var
  canvas = document.getElementById('canvas'),
  ctx = canvas.getContext('2d'),
  sideLength = 200;

if (ctx) {
  ctx.translate(50, 225);
  drawTriangle(ctx, sideLength);
  drawCircles(ctx, 14 * 3, sideLength);
}

演示:http://jsfiddle.net/ej2Kq/

关于javascript - 动态排列三 Angular 形中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211768/

相关文章:

javascript - 如何使用 AngularJS i18n 为不同的语言定义不同的字体?

javascript - Chrome 浏览器推送通知包含数据?

php - jQuery 函数调用 ajax 不起作用/返回任何内容

javascript - 使用 symfony 在 twig 中隐藏表格行

jquery - 如何使 div 在行类中可排序?

javascript - 在 MVC Razor 中从一个页面到另一个页面维护 Grid MVC 复选框状态

java - 为什么类对象只能在java中动态创建?

javascript - 在提交表单帖子之前获取 URL

c++ - 要执行的目标文件的动态加载

c# - 为什么反射仍然有效时动态方法调用失败?