Processing 在平移处理后按定义的数量旋转每个圆

Processing 在平移处理后按定义的数量旋转每个圆,processing,Processing,我需要每个圆有随机旋转取决于“旋转”值,如所附图片所示。旋转仅进行一次,且只能在“旋转”值定义的间隔内进行。任何帮助都将不胜感激 以下是我目前掌握的情况: int maxCircleDiameter=100, diameter, innerOffset; int numOfCirclesX, numOfCirclesY, xPos, yPos; int numOfRand = 4, rand, rot; void setup() { size(600, 600); //starti

我需要每个圆有随机旋转取决于“旋转”值,如所附图片所示。旋转仅进行一次,且只能在“旋转”值定义的间隔内进行。任何帮助都将不胜感激

以下是我目前掌握的情况:


int maxCircleDiameter=100, diameter, innerOffset;
int numOfCirclesX, numOfCirclesY, xPos, yPos;
int numOfRand = 4, rand, rot;

void setup() {
  size(600, 600);

  //starting values
  numOfCirclesX = width/maxCircleDiameter;
  numOfCirclesY = height/maxCircleDiameter;
  innerOffset = maxCircleDiameter/numOfCirclesX;
}
void draw() {
  background(255);

  //random value generation
  randomRot();

  //circle generation
  displayCircles();

  //executes once
  noLoop();
}

void randomRot() {
  rand = (int)random(numOfRand);
  //rot value changes depending of rand value
  switch(rand) {
  case 0: 
    rot = -90; 
    break;
  case 1: 
    rot = 0; 
    break;
  case 2: 
    rot = 90; 
    break;
  case 3: 
    rot = 180; 
    break;
  }
}

void displayCircles() {
  for (int i=0; i < numOfCirclesX*numOfCirclesY; i++) {

    //base diameter
    diameter = maxCircleDiameter;

    //circle coords
    xPos = maxCircleDiameter/2 + (i%numOfCirclesX*maxCircleDiameter);
    yPos = maxCircleDiameter/2 + (i/numOfCirclesX*maxCircleDiameter);
    ellipse(xPos, yPos, diameter, diameter);

    pushMatrix();
    do {
      ellipse(xPos, yPos, diameter, diameter);

      //circle's center moves 7 pixels down
      translate(0, 7);

      //smaller diameter
      diameter -=innerOffset;
    } while (diameter > innerOffset);
    popMatrix();
  }
}

int maxCircleDiameter=100,直径,内偏移量;
int numOfCirclesX、numOfCirclesY、xPos、YPO;
int numorand=4,rand,rot;
无效设置(){
大小(600600);
//起始值
numOfCirclesX=宽度/最大圆直径;
NumoCircleSy=高度/最大圆直径;
innerOffset=maxCircleDiameter/numOfCirclesX;
}
作废提款(){
背景(255);
//随机值生成
randomRot();
//圈生成
显示圆();
//执行一次
noLoop();
}
void randomRot(){
兰德=(int)随机数(numfrand);
//rot值根据rand值而变化
开关(兰德){
案例0:
rot=-90;
打破
案例1:
rot=0;
打破
案例2:
rot=90;
打破
案例3:
rot=180;
打破
}
}
void displayCircles(){
for(int i=0;i内偏移);
popMatrix();
}
}

我修复了您的代码并对添加/调整的部分进行了注释,如果您有任何进一步的问题或您不太理解我所做的,请告诉我。 结果完全符合你的要求

int maxCircleDiameter=100, diameter, innerOffset;
int numOfCirclesX, numOfCirclesY, xPos, yPos;

void setup() {
  size(600, 600);

  //starting values
  numOfCirclesX = width/maxCircleDiameter;
  numOfCirclesY = height/maxCircleDiameter;
  innerOffset = maxCircleDiameter/numOfCirclesX;
}
void draw() {
  background(255);

  //random value generation
  randomRot();

  //circle generation
  displayCircles();

  //executes once
  noLoop();
}

float randomRot() {
  int rand = (int)random(4); //I fixed the number of rands here because the switch below is static and depends on it

  float rot;
  //rot value changes depending of rand value

  switch(rand) {
  case 0: 
    rot = 0; 
    break;

  case 1: 
    rot = PI/2; 
    break;

  case 2: 
    rot = PI; 
    break;

  default: 
    rot = 3*PI/2; 
    break;
  }

  return rot;
}

void displayCircles() {

  for (int i=0; i < numOfCirclesX*numOfCirclesY; i++) {
    //base diameter
    diameter = maxCircleDiameter;

    //circle coords
    xPos = maxCircleDiameter/2 + (i%numOfCirclesX*maxCircleDiameter);
    yPos = maxCircleDiameter/2 + (i/numOfCirclesX*maxCircleDiameter);
    ellipse(xPos, yPos, diameter, diameter);

    pushMatrix();

    //get a random angle to draw the circles on
    float angle=randomRot();
    do {

      ellipse(xPos, yPos, diameter, diameter);

      //circle's center moves 7 pixels to on of the 4 directions depending on the random value angle took
      translate(7*cos(angle), 7*sin(angle));
      //smaller diameter
      diameter -=innerOffset;
    } while (diameter > innerOffset);
    popMatrix();
  }
}
int maxCircleDiameter=100,直径,内偏移量;
int numOfCirclesX、numOfCirclesY、xPos、YPO;
无效设置(){
大小(600600);
//起始值
numOfCirclesX=宽度/最大圆直径;
NumoCircleSy=高度/最大圆直径;
innerOffset=maxCircleDiameter/numOfCirclesX;
}
作废提款(){
背景(255);
//随机值生成
randomRot();
//圈生成
显示圆();
//执行一次
noLoop();
}
float randomRot(){
int rand=(int)random(4);//我在这里固定了rand的数量,因为下面的开关是静态的,并且依赖于它
漂浮腐烂;
//rot值根据rand值而变化
开关(兰德){
案例0:
rot=0;
打破
案例1:
rot=PI/2;
打破
案例2:
rot=PI;
打破
违约:
rot=3*PI/2;
打破
}
返腐;
}
void displayCircles(){
for(int i=0;i内偏移);
popMatrix();
}
}
祝你好运