Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在三角形中动态排列元素?_Javascript_Jquery_Dynamic_Geometry - Fatal编程技术网

Javascript 在三角形中动态排列元素?

Javascript 在三角形中动态排列元素?,javascript,jquery,dynamic,geometry,Javascript,Jquery,Dynamic,Geometry,我正在寻找一个JS函数来动态排列三角形中的元素,如下图所示: 元素的数量取决于用户的选择,因此每次都会有所不同。 我试着画了一个圆,但画三角形似乎很难。在图上可以清楚地看到,只有一定数量的元素可以以这种方式排列。这个数字应该可以被3整除。首先,检查前提条件。然后将您拥有的元素总量分成三组,并将每组均匀分布在每个边界上。因此,现在我提出了以下建议: 它可以完成任务,但我不喜欢手动添加最后一个圆。试试这个: function drawTriangle(ctx, sideLength) { v

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

元素的数量取决于用户的选择,因此每次都会有所不同。
我试着画了一个圆,但画三角形似乎很难。在图上可以清楚地看到,只有一定数量的元素可以以这种方式排列。这个数字应该可以被3整除。首先,检查前提条件。然后将您拥有的元素总量分成三组,并将每组均匀分布在每个边界上。

因此,现在我提出了以下建议:

它可以完成任务,但我不喜欢手动添加最后一个圆。

试试这个:

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);
}
函数drawTriangle(ctx,边长){
变量i=0,方向=1;
ctx.save();
ctx.strokeStyle='rgba(0,0,0,1)';
ctx.beginPath();
ctx.moveTo(0,0);
对于(;i<3;i+=1){
ctx.旋转(Math.PI/-3);
ctx.lineTo(方向*边长,0);
平移(方向*边长,0);
方向*=-1;
}
ctx.closePath();
ctx.stroke();
ctx.restore();
}
函数drawCircle(ctx){
ctx.save();
ctx.fillStyle='rgba(255,0,0,1)';
ctx.beginPath();
ctx.arc(0,0,3,0,2*Math.PI,真);
ctx.closePath();
ctx.fill();
ctx.restore();
}
函数drawCircles(ctx、num、边长){
变量步长=(边长*3)/num,i=0;
ctx.save();
对于(;i

演示:

谢谢。我已经做了这个数字可以被3整除的部分。如何在边界上分散一个组?101如何绘制三角形=)在边界上,将标记等分放置,怎么样?你应该有边界两端的坐标(因为你画的是三角形,所以你肯定有),并且知道要放置的元素的数量,这样你就可以以相等的步骤来完成。所以现在我想到了这个:它可以完成任务,但我不喜欢手动添加最后一个圆。我试着从这个角度出发:也试着画三条线,每一条线旋转成一个三角形。提供了相当好的结果,但我想知道是否有一个适当的方法来做到这一点。