如何使用 FOR 循环在一个圆圈中创建圆圈(在处理中)

How can I use a FOR loop to create circles in a circle (in Processing)

我需要创建一个循环,它将 space 在 Processing 中均匀地围绕一个圆圈。

我知道我可以通过某种方式实现 FOR 循环。

我需要能够增加或减少这个圆圈周围的圆圈数量(通过按下按钮),但要保持它们相等 spaced.

我知道我需要将公式包含在 FOR 循环中以获取 X 轴和 Y 轴。公式:

being
   X = R*cos(angle-90)+Y0
   Y = R*sin(angle-90)+X0

我理解了FOR循环的三个参数;什么时候开始,什么时候结束,运行时有什么变化。

我看不到的是如何将公式实现到 FOR 循环中。

非常感谢

这是我的代码

void setup () {
  size (600, 600);
  background (255, 255, 255);
  smooth ();
  ellipse (width/2, height/2, 200, 200); // the guide circle. Not needed in final code.
}


void draw() {


  for (int i = 0; i < 20; i ++) {
    for (int j = 0; j < 20; j ++) {

      ellipse (i *20, j * 20, 20, 20);
    }
  }
}

这段代码应该可以解决问题:

    float incrementalAngle = 0.0;

void setup(){
  size(600, 600);
  smooth();
  background(0);

  ellipse(width/2, height/2, 200, 200);
  drawCircles(20, 200);
}

void draw(){

}

void drawCircles(int circlesNumber, int bigCircleNumber){
  float angle = incrementalAngle;

  for(int i = 0; i < circlesNumber; i++){
    ellipse(bigCircleNumber * cos(incrementalAngle) + height/2, 
            bigCircleNumber * sin(incrementalAngle) + width/2, 
            circlesNumber, circlesNumber);
    incrementalAngle += TWO_PI / circlesNumber;  
  } 
}

因此不需要第二个循环,您尝试引入的公式将位于椭圆的 X 和 Y 位置,通过计算角度、cos 和 sin,您可以获得结果你在找

现在剩下的就是通过在 mousePressed() 方法中单击并绘制该数量来获得所需的圆圈数。

希望这对你有用,如果你需要更多帮助,请给我打电话

问候 何塞.

感谢所有帮助过的人。

我设法做到了(与你略有不同 @Jose Gonzalez

   int nbr_circles = 2;
void setup() {    
  size(600, 600);

  smooth();
  background(255);
} 

void draw() { 
  background(255);
  float cx = width/2.0;
  float cy = height/2.0;
  fill(0);
  //float x, y; //  
  for (int i = 0; i < nbr_circles; i++) 
  {
    float angle = i * TWO_PI / nbr_circles;
    float x = cx + 110.0 * cos(angle);                
    float y = cy + 110.0 * sin(angle);                
    ellipse(x, y, 20, 20);
  }
}

void mousePressed() {

  if (mouseButton == LEFT) {
    if (nbr_circles < 20)
    nbr_circles = nbr_circles + 1;

  } else if (mouseButton == RIGHT) {
    if (nbr_circles > 2) 
      nbr_circles = nbr_circles - 1;

  }
}